awestruct 0.5.4.rc → 0.5.4.rc2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,29 @@
1
+ source 'https://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'spectator', '>= 1.2.5'
5
+ gem 'hashery', '>= 2.1.0'
6
+ gem 'rspec', '>= 2.9'
7
+ gem 'rake', '>= 0.9.2'
8
+ end
9
+
10
+ group :test do
11
+ gem 'rb-inotify', '>= 0.9.0'
12
+ gem 'rack-test'
13
+ gem 'tilt', '>= 1.3.5'
14
+ gem 'coffee-script', '>= 2.2.0'
15
+ gem 'asciidoctor', '>= 0.1.3' # >= 0.1.1 is required for front matter integration
16
+ gem 'slim', '>= 1.3.6'
17
+ gem 'kramdown', '>= 0.14.2'
18
+ gem 'therubyracer', '0.10.0', :platforms => :ruby
19
+ gem 'therubyrhino', '~> 2.0.2', :platforms => :jruby
20
+ gem 'less', '>= 2.2.2'
21
+ gem 'org-ruby', '>= 0.7'
22
+ gem 'RedCloth', '>= 4.2.9'
23
+ gem 'mustache', '>= 0.99.4'
24
+ gem 'uglifier', '>= 1.3.0'
25
+ gem 'htmlcompressor', '>= 0.0.7'
26
+ gem 'git', '~> 1.2.5'
27
+ end
28
+
29
+ gemspec
@@ -0,0 +1,18 @@
1
+ Copyright (c) 2010-2013 Bob McWhirter and contributors (see git log)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy
4
+ of this software and associated documentation files (the "Software"), to
5
+ deal in the Software without restriction, including without limitation the
6
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
+ sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in
11
+ all copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,31 @@
1
+ [![Build Status](https://secure.travis-ci.org/awestruct/awestruct.png)](http://travis-ci.org/awestruct/awestruct)
2
+
3
+ [![Build Status](https://buildhive.cloudbees.com/job/awestruct/job/awestruct/badge/icon)](https://buildhive.cloudbees.com/job/awestruct/job/awestruct/)
4
+
5
+ # For more information
6
+
7
+ Please see the complete site at <http://awestruct.org/>.
8
+
9
+ # License
10
+
11
+ Copyright (c) 2010-2011 Bob McWhirter and contributors (see git log)
12
+
13
+ Permission is hereby granted, free of charge, to any person obtaining a copy
14
+ of this software and associated documentation files (the "Software"), to
15
+ deal in the Software without restriction, including without limitation the
16
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
17
+ sell copies of the Software, and to permit persons to whom the Software is
18
+ furnished to do so, subject to the following conditions:
19
+
20
+ The above copyright notice and this permission notice shall be included in
21
+ all copies or substantial portions of the Software.
22
+
23
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
26
+ THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
27
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
28
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29
+
30
+ It also uses code from the Sequel project under the same license.
31
+
@@ -0,0 +1,100 @@
1
+ require 'rubygems'
2
+ require 'date'
3
+ require 'bundler/setup'
4
+ require 'rspec/core/rake_task'
5
+
6
+ def gem_name
7
+ @gem_name ||= Dir['*.gemspec'].first.split('.').first
8
+ end
9
+
10
+ def gem_version
11
+ line = File.read("lib/#{gem_name}/version.rb")[/^\s*VERSION\s*=\s*.*/]
12
+ line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
13
+ end
14
+
15
+ def date
16
+ Date.today.to_s
17
+ end
18
+
19
+ def gemspec_file
20
+ "#{gem_name}.gemspec"
21
+ end
22
+
23
+ def gem_file
24
+ "#{gem_name}-#{gem_version}.gem"
25
+ end
26
+
27
+ def version_tag
28
+ "v#{gem_version}"
29
+ end
30
+
31
+ def replace_header(head, header_name)
32
+ head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
33
+ end
34
+
35
+ task :default => :build
36
+
37
+ if !defined?(RSpec)
38
+ puts 'spec targets require RSpec'
39
+ else
40
+ desc 'Run all specs'
41
+ RSpec::Core::RakeTask.new(:spec) do |t|
42
+ t.pattern = 'spec/**/*_spec.rb'
43
+ t.rspec_opts = ['-cfs']
44
+ end
45
+ end
46
+
47
+ desc "Run all specs and build #{gem_file} into the pkg directory"
48
+ task :build => [:spec, :gemspec] do
49
+ sh "gem build #{gemspec_file}"
50
+ sh 'mkdir -p pkg'
51
+ sh "mv #{gem_file} pkg"
52
+ end
53
+
54
+ desc "Build #{gem_file} and install it locally"
55
+ task :install => :build do
56
+ sh "gem install -l -f pkg/#{gem_file}"
57
+ end
58
+
59
+ desc "Update #{gemspec_file}"
60
+ task :gemspec do
61
+ spec = File.read(gemspec_file)
62
+
63
+ # replace name version and date
64
+ replace_header(spec, :gem_name)
65
+ replace_header(spec, :date)
66
+
67
+ File.open(gemspec_file, 'w') { |io| io.write spec }
68
+ puts "Updated #{gemspec_file}"
69
+ end
70
+
71
+ desc "Create tag #{version_tag} and push repository to origin"
72
+ task :tag do
73
+ unless `git branch` =~ / master$/
74
+ puts 'You must be on the master branch to release!'
75
+ exit!
76
+ end
77
+ if version_tag.end_with?('.dev')
78
+ puts 'You cannot tag and release a dev version!'
79
+ exit!
80
+ end
81
+
82
+ if `git tag`.split(/\n/).include?(version_tag)
83
+ puts "Tag #{version_tag} has already been created."
84
+ else
85
+ sh "git commit --allow-empty -a -m 'Release #{gem_version}'"
86
+ sh 'git push origin master'
87
+ sh "git tag #{version_tag}"
88
+ sh "git push origin #{version_tag}"
89
+ end
90
+ end
91
+
92
+ desc "Build #{gem_file}, create and push tag #{version_tag} and publish gem to RubyGems.org"
93
+ task :release => [ :build, :tag ] do
94
+ sh "gem push pkg/#{gem_file}"
95
+ end
96
+
97
+ desc 'Run `spectator` to monitor changes and execute specs in TDD fashion'
98
+ task :tdd do
99
+ sh 'spectator'
100
+ end
@@ -0,0 +1,48 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+ require 'awestruct/version'
3
+
4
+ spec = Gem::Specification.new do |s|
5
+ s.name = 'awestruct'
6
+ s.version = Awestruct::VERSION
7
+ s.date = '2013-11-11'
8
+
9
+ s.authors = ['Bob McWhirter', 'Jason Porter', 'Lance Ball', 'Dan Allen', 'Torsten Curdt', 'other contributors']
10
+ s.email = ['bob@mcwhirter.org', 'lightguard.jp@gmail.com', 'lball@redhat.com', 'dan.j.allen@gmail.com', 'tcurdt@vafer.org']
11
+ s.homepage = 'http://awestruct.org'
12
+ s.summary = 'Static site baking and publishing tool'
13
+ s.description = 'Awestruct is a static site baking and publishing tool. It supports an extensive list of both templating and markup languages via Tilt (Haml, Slim, AsciiDoc, Markdown, Sass via Compass, etc), provides mobile-first layout and styling via Bootstrap or Foundation, offers a variety of deployment options (rsync, git, S3), handles site optimizations (minification, compression, cache busting), includes built-in extensions such as blog post management and is highly extensible.'
14
+
15
+ s.rubyforge_project = s.name
16
+
17
+ s.license = 'MIT'
18
+
19
+ s.platform = Gem::Platform::RUBY
20
+
21
+ s.has_rdoc = true
22
+ s.rdoc_options = ['--charset=UTF-8']
23
+ s.extra_rdoc_files = 'README.md'
24
+
25
+ s.files = `git ls-files -z -- {lib,man,spec}/* {README,LICENSE}* *{.gemspec,file}`.split("\0")
26
+ s.test_files = s.files.select { |path| path =~ /^spec\/.*_spec\.rb/ }
27
+ s.executables = `git ls-files -z -- bin/*`.split("\0").map {|f| File.basename f }
28
+ s.require_paths = ['lib']
29
+
30
+ s.requirements = <<-EOS
31
+ Any markup languages you are using and its dependencies.
32
+ Haml and Markdown filters are touchy things. Redcarpet or Rdiscount work well if you're running on MRI. JRuby should be using haml 4.0.0+ with Kramdown.'
33
+ EOS
34
+
35
+ s.add_dependency 'haml', '~> 4.0.1'
36
+ s.add_dependency 'nokogiri', '1.5.10'
37
+ s.add_dependency 'tilt', '>= 1.3.6'
38
+ s.add_dependency 'compass', '>= 0.12.1'
39
+ s.add_dependency 'compass-960-plugin', '~> 0.10.4'
40
+ s.add_dependency 'bootstrap-sass', '>= 2.3.1.0'
41
+ s.add_dependency 'zurb-foundation', '>= 4.0.9'
42
+ s.add_dependency 'mime-types', '1.25'
43
+ s.add_dependency 'rest-client', '>= 1.6.7'
44
+ s.add_dependency 'ruby-s3cmd', '~> 0.1.5'
45
+
46
+ s.add_dependency 'listen', '~> 1.0'
47
+ s.add_dependency 'rack', '~> 1.5.2'
48
+ end
@@ -1,4 +1,5 @@
1
1
  #require 'guard/awestruct'
2
+ require 'awestruct/util/exception_helper'
2
3
 
3
4
  require 'listen'
4
5
 
@@ -39,13 +40,11 @@ module Awestruct
39
40
  engine.generate_page_by_output_path( path )
40
41
  $LOG.info "Generating.... done!" if $LOG.info?
41
42
  rescue => e
42
- $LOG.error e if $LOG.error?
43
- $LOG.error e.backtrace.join("\n") if $LOG.error?
43
+ ExceptionHelper.log_building_error e, path
44
44
  end
45
45
  }
46
46
  rescue => e
47
- $LOG.error e if $LOG.error?
48
- $LOG.error e.backtrace.join("\n") if $LOG.error?
47
+ ExceptionHelper.log_building_error e, path
49
48
  end
50
49
  end
51
50
  end
@@ -1,4 +1,5 @@
1
1
  require 'awestruct/engine'
2
+ require 'awestruct/util/exception_helper'
2
3
  require 'compass'
3
4
 
4
5
  module Awestruct
@@ -19,8 +20,7 @@ module Awestruct
19
20
  $LOG.info "Generating site: #{base_url}" if $LOG.info?
20
21
  @engine.run( @profile, @base_url, @default_base_url, @force )
21
22
  rescue =>e
22
- $LOG.error e if $LOG.error?
23
- $LOG.error e.backtrace.join("\n") if $LOG.error?
23
+ ExceptionHelper.log_building_error e, ''
24
24
  return false
25
25
  end
26
26
  end
@@ -78,8 +78,8 @@ module Awestruct
78
78
  begin
79
79
  step.perform(dir)
80
80
  rescue => e
81
- $LOG.error e if $LOG.error?
82
- $LOG.error e.backtrace.join("\n") if $LOG.error?
81
+ ExceptionHelper.log_error e
82
+ ExceptionHelper.log_backtrace e
83
83
  end
84
84
  end
85
85
  end
@@ -89,8 +89,8 @@ module Awestruct
89
89
  begin
90
90
  step.unperform(dir)
91
91
  rescue => e
92
- $LOG.error e if $LOG.error?
93
- $LOG.error e.backtrace.join("\n") if $LOG.error?
92
+ ExceptionHelper.log_error e
93
+ ExceptionHelper.log_backtrace e
94
94
  end
95
95
  end
96
96
  end
@@ -1,5 +1,7 @@
1
1
  require 'awestruct/deployers'
2
2
  require 'awestruct/compatibility'
3
+ require 'awestruct/util/exception_helper'
4
+
3
5
  Dir[ File.join( File.dirname(__FILE__), '..', 'scm', '*.rb' ) ].each do |f|
4
6
  begin
5
7
  require f
@@ -18,6 +20,7 @@ module Awestruct
18
20
  # Add a single front slash at the end of output dir
19
21
  @site_path = File.join( site_config.output_dir, '/' ).gsub(/^\w:\//, '/')
20
22
  @gzip = deploy_config['gzip']
23
+ @gzip_level = deploy_config['gzip_level'] || Zlib::BEST_COMPRESSION
21
24
  @source_dir = deploy_config['source_dir'] || site_config.dir
22
25
  @ignore_uncommitted = deploy_config['uncommitted']
23
26
  init_scm(deploy_config['scm'] || 'git')
@@ -61,16 +64,16 @@ module Awestruct
61
64
  when :css, :js, :html
62
65
  require 'zlib'
63
66
  if !is_gzipped item
64
- gzip_file item
67
+ gzip_file(item, @gzip_level)
65
68
  end
66
69
  end
67
70
  end
68
71
  end
69
72
  end
70
73
 
71
- def gzip_file(filename)
74
+ def gzip_file(filename, level)
72
75
  $LOG.debug "Gzipping File #{filename}"
73
- Zlib::GzipWriter.open("#{filename}.gz") do |gz|
76
+ Zlib::GzipWriter.open("#{filename}.gz", level) do |gz|
74
77
  gz.mtime = File.mtime(filename)
75
78
  gz.orig_name = filename
76
79
  gz.write File.binread(filename)
@@ -94,7 +97,7 @@ module Awestruct
94
97
  clazz = Object.const_get('Awestruct').const_get('Scm').const_get(type.capitalize)
95
98
  @scm = clazz.new
96
99
  rescue
97
- $LOG.error( "Could not resolve class for scm type: #{type}" ) if $LOG.error?
100
+ ExceptionHelper.log_message( "Could not resolve class for scm type: #{type}" )
98
101
  end
99
102
  end
100
103
  end
@@ -1,4 +1,5 @@
1
1
  require 'awestruct/deploy/base_deploy'
2
+ require 'awestruct/util/exception_helper'
2
3
  require 'git'
3
4
 
4
5
  module Awestruct
@@ -43,7 +44,7 @@ module Awestruct
43
44
  begin
44
45
  git.commit("Published #{@branch} to GitHub pages.")
45
46
  rescue ::Git::GitExecuteError => e
46
- $LOG.error "Can't commit. #{e}." if $LOG.error?
47
+ ExceptionHelper.log_message "Can't commit. #{e}."
47
48
  end
48
49
  end
49
50
  git.reset_hard
@@ -327,6 +327,12 @@ module Awestruct
327
327
  full_path = File.join( '', path )
328
328
  page = site.pages.find{ |p| p.relative_source_path.to_s == full_path } ||
329
329
  site.layouts.find{ |p| p.relative_source_path.to_s == full_path }
330
+ #return if page.nil?
331
+
332
+ if ( page.nil? )
333
+ page = (site.partials||[]).find{ |p| p.relative_source_path.to_s == full_path }
334
+ end
335
+
330
336
  return if page.nil?
331
337
 
332
338
  if !page.output_path.nil?
@@ -18,6 +18,10 @@ module Awestruct
18
18
  page.send( "#{k}=", v )
19
19
  end if params
20
20
 
21
+ Awestruct::Dependencies.top_page.site.partials ||= []
22
+ Awestruct::Dependencies.top_page.site.partials << page
23
+ Awestruct::Dependencies.track_dependency( page )
24
+
21
25
  page.content
22
26
  end
23
27
 
@@ -1,3 +1,4 @@
1
+ require 'awestruct/util/exception_helper'
1
2
  require 'pathname'
2
3
 
3
4
  module Awestruct
@@ -14,8 +15,7 @@ module Awestruct
14
15
  end
15
16
  result
16
17
  rescue Exception => e
17
- $LOG.error "#{e}" if $LOG.error?
18
- $LOG.error "#{e.backtrace.join("\n")}" if $LOG.error?
18
+ ExceptionHelper.log_building_error e, p.relative_source_path
19
19
  end
20
20
  end
21
21
 
@@ -3,6 +3,7 @@
3
3
  # Add a sitemap.yml file to add files that for one reason or
4
4
  # another won't be hanging off of site (e.g. they're in .htaccess)
5
5
  require 'ostruct'
6
+ require 'awestruct/util/exception_helper'
6
7
 
7
8
  module Awestruct
8
9
  module Extensions
@@ -74,7 +75,7 @@ module Awestruct
74
75
  page.lastmod = date.strftime( "%Y-%m-%d" )
75
76
  end
76
77
  rescue Exception => e
77
- $LOG.error "Cannot parse date #{date.to_s}: #{e}" if $LOG.error?
78
+ ExceptionHelper.log_building_error e, page.relative_source_path
78
79
  end
79
80
  else
80
81
  page.lastmod = Time.now.strftime( "%Y-%m-%d" )
@@ -1,3 +1,4 @@
1
+ require 'awestruct/util/exception_helper'
1
2
  require 'awestruct/handlers/base_handler'
2
3
 
3
4
  require 'tilt'
@@ -118,21 +119,25 @@ module Awestruct
118
119
  end
119
120
 
120
121
  def rendered_content(context, with_layouts=true)
121
- $LOG.debug "invoking tilt for #{delegate.path.to_s} with_layouts = #{with_layouts}" if $LOG.debug?
122
+ $LOG.debug "invoking tilt for #{delegate.path} with_layouts = #{with_layouts}" if $LOG.debug?
123
+
122
124
  begin
125
+ c = delegate.rendered_content(context, with_layouts)
126
+ return "" if c.nil? or c.empty?
123
127
  template = Tilt::new(delegate.path.to_s, delegate.content_line_offset + 1, options) { |engine|
124
- delegate.rendered_content(context, with_layouts)
128
+ c
125
129
  }
126
130
  return template.render(context)
127
131
  rescue LoadError => e
128
- $LOG.error "Could not load template library required for rendering #{delegate.path.to_s}, please see rendered output for more information" if $LOG.error?
129
- return "<h1>#{e.message}</h1><h2>Rendering file #{delegate.path.to_s} resulted in a failure.</h2><p>Backtrace: #{e.backtrace.join '<br>'}</p>"
132
+ ExceptionHelper.log_message "Could not load template library required for rendering #{File.join site.dir, relative_source_path}."
133
+ ExceptionHelper.log_message "Please see #{File.join site.dir, output_path} for more information"
134
+ return ExceptionHelper.html_error_report e, relative_source_path
130
135
  rescue Exception => e
131
- $LOG.error "An error during rendering #{delegate.path.to_s} occurred, please see rendered output for more information" if $LOG.error?
132
- return "<h1>#{e.message}</h1><h2>Rendering file #{delegate.path.to_s} resulted in a failure.</h2><h3>Line: #{e.line if e.respond_to?(:line)}</h3><p>Backtrace: #{e.backtrace.join '<br>'}</p>"
136
+ ExceptionHelper.log_message "An error during rendering #{File.join site.dir, relative_source_path} occurred."
137
+ ExceptionHelper.log_message "Please see #{File.join site.dir, output_path} for more information"
138
+ return ExceptionHelper.html_error_report e, relative_source_path
133
139
  end
134
140
  end
135
-
136
141
  end
137
142
  end
138
143
  end