awestruct 0.4.6 → 0.4.7

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.
@@ -16,7 +16,7 @@ module Awestruct
16
16
  def inspect
17
17
  "AStruct{...}"
18
18
  end
19
-
19
+
20
20
  end
21
21
 
22
22
  end
@@ -13,7 +13,7 @@ module Awestruct
13
13
  end
14
14
 
15
15
  def cascade_for_nils!
16
- @cascade_for_nils = true
16
+ @cascade_for_nils = true
17
17
  self
18
18
  end
19
19
 
@@ -22,8 +22,8 @@ module Awestruct
22
22
  end
23
23
 
24
24
  def [](key)
25
- r = super( key ) || super( key.to_sym ) || super( key.to_s )
26
- transform_entry( key, r )
25
+ r = [key, key.to_sym, key.to_s].find { |fk| !super(fk).nil? }
26
+ transform_entry( key, super(r) )
27
27
  end
28
28
 
29
29
  def method_missing(sym, *args, &blk)
@@ -40,7 +40,7 @@ module Awestruct
40
40
  if key?(name)
41
41
  self[name]
42
42
  elsif @cascade_for_nils
43
- self[name] = AStruct.new.cascade_for_nils!
43
+ self[name] = AStruct.new.cascade_for_nils!
44
44
  self[name]
45
45
  else
46
46
  nil
@@ -73,9 +73,9 @@ module Awestruct
73
73
  end
74
74
 
75
75
  def inspect
76
- "AStruct{...}"
76
+ "AStruct<#{super.to_s}>"
77
77
  end
78
-
78
+
79
79
  end
80
80
 
81
81
  end
@@ -31,7 +31,7 @@ module Awestruct
31
31
  end
32
32
 
33
33
  deployer = deployer_class.new( site_config, deploy_config )
34
- deployer.run
34
+ deployer.run(deploy_config)
35
35
  end
36
36
 
37
37
  private
@@ -78,6 +78,7 @@ module Awestruct
78
78
  def setup_config()
79
79
  @config = Awestruct::Config.new( Dir.pwd )
80
80
  @config.track_dependencies = true if ( options.auto )
81
+ @config.verbose = true if ( options.verbose )
81
82
  end
82
83
 
83
84
  def invoke_init()
@@ -20,6 +20,7 @@ module Awestruct
20
20
  attr_accessor :profile
21
21
  attr_accessor :deploy
22
22
  attr_accessor :script
23
+ attr_accessor :verbose
23
24
 
24
25
  def initialize()
25
26
  @generate = nil
@@ -43,6 +44,9 @@ module Awestruct
43
44
 
44
45
  def parse!(args)
45
46
  opts = OptionParser.new do |opts|
47
+ opts.on('-w', '--verbose', 'Enable verbose mode') do |verbose|
48
+ self.verbose = true
49
+ end
46
50
  opts.on( '-i', '--init', 'Initialize a new project in the current directory' ) do |init|
47
51
  self.init = init
48
52
  self.generate = false
@@ -17,18 +17,20 @@ module Awestruct
17
17
  attr_accessor :images_dir
18
18
  attr_accessor :stylesheets_dir
19
19
 
20
+ attr_accessor :verbose
21
+
20
22
  def initialize(dir = Dir.pwd)
21
- @dir = Pathname.new( dir )
23
+ @dir = Pathname.new( dir )
22
24
  @layouts_dir = Pathname.new( File.join(dir, '_layouts') )
23
25
  @config_dir = Pathname.new( File.join(dir, '_config') )
24
26
  @input_dir = Pathname.new( File.join(dir, '') )
25
27
  @output_dir = Pathname.new( File.join(dir, '_site') )
26
28
  @extension_dir = Pathname.new( File.join(dir, '_ext') )
27
29
  @skin_dir = Pathname.new( File.join(dir, '_skin') )
28
- @tmp_dir = Pathname.new( File.join(dir, '_tmp') )
30
+ @tmp_dir = Pathname.new( File.join(dir, '_tmp') )
29
31
 
30
- @images_dir = Pathname.new( File.join(dir, 'images') )
31
- @stylesheets_dir = Pathname.new( File.join(dir, 'stylesheets') )
32
+ @images_dir = Pathname.new( File.join(dir, 'images') )
33
+ @stylesheets_dir = Pathname.new( File.join(dir, 'stylesheets') )
32
34
 
33
35
  @ignore = File.exists?(ignore_file = File.join(dir, ".awestruct_ignore")) ? Dir[*IO.read(ignore_file).each_line.map(&:strip)] : []
34
36
 
@@ -8,15 +8,15 @@ module Awestruct
8
8
  attr_accessor :page
9
9
 
10
10
  def initialize(hash)
11
- super
11
+ super
12
12
  @page = hash[:page]
13
13
  @site = hash[:site]
14
-
15
- end
14
+
15
+ end
16
16
 
17
17
  def inspect
18
- "Awestruct::Context{:page=>#{self.page.inspect}}"
19
- end
18
+ "Awestruct::Context{:page=>#{self.page.inspect}}"
19
+ end
20
20
  end
21
21
 
22
22
  end
@@ -5,8 +5,12 @@ module Awestruct
5
5
  module Deploy
6
6
  class Base
7
7
  UNCOMMITTED_CHANGES = "You have uncommitted changes in the working branch. Please commit or stash them."
8
- def run
9
- git.status.changed.empty? ? publish_site : existing_changes
8
+ def run(deploy_config)
9
+ if deploy_config['uncommitted'] == true
10
+ publish_site
11
+ else
12
+ git.status.changed.empty? ? publish_site : existing_changes
13
+ end
10
14
  end
11
15
 
12
16
  def git
@@ -245,7 +245,8 @@ module Awestruct
245
245
 
246
246
  def generate_page_by_output_path(path)
247
247
  full_path = File.join( '', path )
248
- page = site.pages.find{|p| p.relative_source_path.to_s==full_path} || site.layouts.find{|p| p.relative_source_path.to_s==full_path}
248
+ page = site.pages.find{ |p| p.relative_source_path.to_s == full_path } ||
249
+ site.layouts.find{ |p| p.relative_source_path.to_s == full_path }
249
250
  return if page.nil?
250
251
 
251
252
  if !page.output_path.nil?
@@ -1,39 +1,35 @@
1
1
  require 'awestruct/extensions/relative'
2
- require 'pathname'
3
2
 
4
3
  module Awestruct
5
4
  module Extensions
6
5
  module Assets
7
6
 
7
+ include Awestruct::Extensions::Relative
8
+
8
9
  def asset(href)
9
10
  if site.assets_url
10
11
  File.join(site.assets_url, href)
11
12
  else
12
- relative(File.join("/#{site.assets_path||'assets'}", href))
13
+ relative(File.join("/#{site.assets_path || 'assets'}", href))
13
14
  end
14
15
  end
15
16
 
16
- class Transformer
17
- # FIXME this is not DRY at all
18
- def relative(page, href)
19
- Pathname.new(href).relative_path_from(Pathname.new(File.dirname(page.output_path))).to_s
20
- end
21
- def asset(site, page, href)
22
- if site.assets_url
23
- File.join(site.assets_url, href)
24
- else
25
- relative(page, File.join("/#{site.assets_path||'assets'}", href))
26
- end
17
+ class Extension
18
+
19
+ def execute(site)
20
+ site.pages.each{ |p| p.extend Extension }
27
21
  end
28
- def transform(site, page, input)
29
- if page.output_path =~ /\.html/
30
- input.gsub('asset://', asset(site, page, "#{File.basename(File.basename(page.source_path, ".md"))}") + "/")
31
- else
32
- input
22
+
23
+ module Extension
24
+
25
+ include Awestruct::Extensions::Relative
26
+
27
+ def assets_url
28
+ path = File.join("/#{site.assets_path || 'assets'}", File.join(File.dirname(output_path), File.basename(output_path, '.*')))
29
+ relative(path, self)
33
30
  end
34
31
  end
35
32
  end
36
-
37
33
  end
38
34
  end
39
35
  end
@@ -8,6 +8,7 @@ module Awestruct
8
8
  @num_entries = opts[:num_entries] || 50
9
9
  @content_url = opts[:content_url]
10
10
  @feed_title = opts[:feed_title]
11
+ @template = opts[:template] || File.join( File.dirname(__FILE__), 'template.atom.haml' )
11
12
  end
12
13
 
13
14
  def execute(site)
@@ -29,8 +30,7 @@ module Awestruct
29
30
 
30
31
  site.engine.set_urls(atom_pages)
31
32
 
32
- input_page = File.join( File.dirname(__FILE__), 'template.atom.haml' )
33
- page = site.engine.load_page( input_page )
33
+ page = site.engine.load_page( @template )
34
34
  page.date = page.timestamp unless page.timestamp.nil?
35
35
  page.output_path = @output_path
36
36
  page.entries = atom_pages
@@ -1,12 +1,15 @@
1
1
  module Awestruct
2
2
  module Extensions
3
3
  module Cachebuster
4
- def timestamp
5
- (Time.now.to_i / 1000).to_i
6
- end
4
+
7
5
  def cache(href)
8
- "#{href}?#{site.cachebuster||timestamp}"
6
+ "#{href}?#{cachebuster}"
7
+ end
8
+
9
+ def cachebuster(p=page)
10
+ ((site.timestamp || p.input_mtime || Time.now.to_i) / 1000).to_i.to_s
9
11
  end
12
+
10
13
  end
11
14
  end
12
15
  end
@@ -9,6 +9,7 @@ module Awestruct
9
9
  end
10
10
 
11
11
  module Disqus
12
+
12
13
  def disqus_comments()
13
14
  identifier = "null"
14
15
  if self.disqus_identifier or site.disqus_generate_id
@@ -52,6 +53,8 @@ module Awestruct
52
53
  }
53
54
  end
54
55
 
56
+ private
57
+
55
58
  def resolve_disqus_identifier()
56
59
  self.disqus_identifier ? self.disqus_identifier : Digest::SHA1.hexdigest(self.date.strftime('%Y-%m-%d-') + self.slug)
57
60
  end
@@ -55,7 +55,7 @@ class String
55
55
  str = String.new(self)
56
56
  String::ACCENTS_MAPPING.each {|letter,accents|
57
57
  packed = accents.pack('U*')
58
- rxp = Regexp.new("[#{packed}]", nil, 'U')
58
+ rxp = Regexp.new("[#{packed}]", nil)
59
59
  str.gsub!(rxp, letter)
60
60
  }
61
61
 
@@ -4,17 +4,31 @@ module Awestruct
4
4
 
5
5
  def initialize(pattern, replacement, options = {})
6
6
  @pattern = pattern
7
- @replacement = replacement
8
- @gsub_required = options[:gsub_required] || lambda { |site, page| page.output_path.end_with?(".html") }
7
+ @replacement = replacement.is_a?(Proc) ? replacement : lambda { |site, page| replacement }
8
+ @gsub_required = lambdaize(options[:gsub_required])
9
9
  end
10
10
 
11
11
  def transform(site, page, rendered)
12
12
  if (@gsub_required.call(site, page))
13
- rendered = rendered.gsub(@pattern, @replacement)
13
+ replacement = @replacement.call(site, page).to_s
14
+ rendered = rendered.gsub(@pattern, replacement)
14
15
  end
15
16
  rendered
16
17
  end
17
18
 
19
+ private
20
+
21
+ def lambdaize(param)
22
+ if param.nil?
23
+ lambdaize([".html"])
24
+ else
25
+ if param.is_a?(Array)
26
+ lambda { |site, page| param.any?{ |ext| page.output_path.end_with?(ext) } }
27
+ else
28
+ param
29
+ end
30
+ end
31
+ end
18
32
  end
19
33
  end
20
34
  end
@@ -125,7 +125,7 @@ module Awestruct
125
125
 
126
126
  def yuicompressor(page, input, type)
127
127
  output = ''
128
- Open3.popen3("yuicompressor --type #{Shellwords.escape(type)}") do |stdin, stdout, stderr|
128
+ Open3.popen3("yuicompressor --type #{Shellwords.escape(type.to_s)}") do |stdin, stdout, stderr|
129
129
  threads = []
130
130
  threads << Thread.new(stdout) do |o|
131
131
  while ( ! o.eof? )
@@ -50,6 +50,7 @@ module Awestruct
50
50
  @window_size = opts[:window_size] || 2
51
51
  @remove_input = opts.has_key?( :remove_input ) ? opts[:remove_input] : true
52
52
  @output_prefix = opts[:output_prefix] || File.dirname( @input_path )
53
+ @page_name = opts[:page_name] || 'page/'
53
54
  @collection = opts[:collection]
54
55
  end
55
56
 
@@ -66,7 +67,7 @@ module Awestruct
66
67
  if ( i == 1 )
67
68
  page.output_path = File.join( @output_prefix, File.basename( @input_path ) + ".html" )
68
69
  else
69
- page.output_path = File.join( @output_prefix, "page/#{i}.html" )
70
+ page.output_path = File.join( @output_prefix, "#{@page_name}#{i}.html" )
70
71
  end
71
72
  page.paginate_generated = true
72
73
  site.pages << page
@@ -83,7 +84,7 @@ module Awestruct
83
84
  prev_page = nil
84
85
  paginated_pages.each_with_index do |page,i|
85
86
  slice = page.send( @prop_name )
86
-
87
+
87
88
  slice.current_page = page
88
89
  slice.current_page_index = i
89
90
  slice.pages = paginated_pages
@@ -6,6 +6,7 @@ module Awestruct
6
6
  filename = File.join( '_partials', path )
7
7
 
8
8
  if !File.exists?( filename )
9
+ puts "Could not find #{filename}"
9
10
  return nil
10
11
  end
11
12
 
@@ -3,9 +3,11 @@ require 'pathname'
3
3
  module Awestruct
4
4
  module Extensions
5
5
  module Relative
6
- def relative(href)
7
- Pathname.new(href).relative_path_from(Pathname.new(File.dirname(page.output_path))).to_s
6
+
7
+ def relative(href, p = page)
8
+ Pathname.new(href).relative_path_from(Pathname.new(File.dirname(p.output_path))).to_s
8
9
  end
10
+
9
11
  end
10
12
  end
11
13
  end
@@ -14,14 +14,14 @@
14
14
  - else
15
15
  %name= site.author
16
16
  - unless page.entries.empty?
17
- %updated= page.entries.first.date.xmlschema
17
+ %updated= page.entries.first.input_mtime.xmlschema
18
18
  %link{:rel=>"self", :type=>"application/atom+xml", :href=>"#{site.base_url}#{page.url}" }
19
19
  %link{:rel=>"alternate", :type=>"text/html", :href=>"#{page.content_url}/" }
20
20
  - for entry in page.entries
21
21
  %entry
22
22
  %id #{site.base_url}#{entry.url}
23
23
  %title= escape_once( entry.title )
24
- %updated= entry.date.xmlschema
24
+ %updated= entry.input_mtime.xmlschema
25
25
  %published= entry.date.xmlschema
26
26
  %link{:rel=>"alternate", :type=>"text/html", :href=>"#{site.base_url}#{entry.url}" }
27
27
  - if ( defined?( entry.author ) )
@@ -7,6 +7,7 @@ require 'awestruct/handlers/restructuredtext_handler'
7
7
  require 'awestruct/handlers/textile_handler'
8
8
  require 'awestruct/handlers/erb_handler'
9
9
  require 'awestruct/handlers/haml_handler'
10
+ require 'awestruct/handlers/mustache_handler'
10
11
  require 'awestruct/handlers/sass_handler'
11
12
  require 'awestruct/handlers/scss_handler'
12
13
  require 'awestruct/handlers/javascript_handler'
@@ -25,6 +26,7 @@ module Awestruct
25
26
  Awestruct::Handlers::AsciidocHandler::CHAIN,
26
27
  Awestruct::Handlers::RestructuredtextHandler::CHAIN,
27
28
  Awestruct::Handlers::HamlHandler::CHAIN,
29
+ Awestruct::Handlers::MustacheHandler::CHAIN,
28
30
  Awestruct::Handlers::SassHandler::CHAIN,
29
31
  Awestruct::Handlers::ScssHandler::CHAIN,
30
32
  Awestruct::Handlers::JavascriptHandler::CHAIN,
@@ -75,7 +75,13 @@ module Awestruct
75
75
  @content_line_offset = -1
76
76
  end
77
77
 
78
- @front_matter = YAML.load( yaml_content ) || {}
78
+ begin
79
+ @front_matter = YAML.load( yaml_content ) || {}
80
+ rescue => e
81
+ puts "could not parse #{relative_source_path}"
82
+ raise e
83
+ end
84
+
79
85
  @parsed_parts = true
80
86
 
81
87
  end
@@ -0,0 +1,44 @@
1
+
2
+ require 'awestruct/handler_chain'
3
+ require 'awestruct/handlers/base_handler'
4
+ require 'awestruct/handlers/file_handler'
5
+ require 'awestruct/handlers/front_matter_handler'
6
+ require 'awestruct/handlers/layout_handler'
7
+
8
+ require 'mustache'
9
+
10
+ module Awestruct
11
+ module Handlers
12
+ class MustacheHandler < BaseHandler
13
+
14
+ CHAIN = Awestruct::HandlerChain.new( /\.mustache$/,
15
+ Awestruct::Handlers::FileHandler,
16
+ Awestruct::Handlers::FrontMatterHandler,
17
+ Awestruct::Handlers::MustacheHandler,
18
+ Awestruct::Handlers::LayoutHandler
19
+ )
20
+
21
+ def initialize(site, delegate)
22
+ super( site, delegate )
23
+ end
24
+
25
+ def simple_name
26
+ File.basename( self.path, "#{output_extension}.mustache" )
27
+ end
28
+
29
+ def output_filename
30
+ return File.basename( relative_source_path, ".mustache") unless relative_source_path.nil?
31
+ nil
32
+ end
33
+
34
+ def output_extension
35
+ File.extname( File.basename( path, ".mustache" ) )
36
+ end
37
+
38
+ def rendered_content(context, with_layouts=true)
39
+ Mustache.render( delegate.raw_content, context )
40
+ end
41
+
42
+ end
43
+ end
44
+ end
@@ -33,7 +33,7 @@ module Awestruct
33
33
 
34
34
  def inspect
35
35
  "Awestruct::Page{ #{self.object_id}: output_path=>#{output_path}, source_path=>#{source_path}, layout=>#{layout} }"
36
- end
36
+ end
37
37
 
38
38
  def create_context(content='')
39
39
  context = Awestruct::Context.new( :site=>site, :page=>self, :content=>content )
@@ -86,11 +86,11 @@ module Awestruct
86
86
  end
87
87
 
88
88
  def stale?
89
- handler.stale? || @dependencies.dependencies.any?(&:stale?)
89
+ handler.stale? || @dependencies.dependencies.any?(&:stale?)
90
90
  end
91
91
 
92
92
  def stale_output?(output_path)
93
- return true if ! File.exist?( output_path )
93
+ return true if ! File.exist?( output_path )
94
94
  return true if input_mtime > File.mtime( output_path )
95
95
  false
96
96
  end
@@ -108,7 +108,7 @@ module Awestruct
108
108
  t = e.mtime
109
109
  end
110
110
  end
111
- t
111
+ t
112
112
  end
113
113
 
114
114
  def all_dependencies
@@ -127,7 +127,15 @@ module Awestruct
127
127
  if context.site.config.track_dependencies
128
128
  Awestruct::Dependencies.push_page( self )
129
129
  end
130
- c = handler.rendered_content( context, with_layouts )
130
+ c = nil
131
+
132
+ begin
133
+ c = handler.rendered_content( context, with_layouts )
134
+ # c = site.engine.pipeline.apply_transformers( context.site, self, c )
135
+ rescue => e
136
+ raise $!, "Failed to render #{self.url}", $!.backtrace
137
+ end
138
+
131
139
  if context.site.config.track_dependencies
132
140
  Awestruct::Dependencies.pop_page
133
141
 
@@ -156,7 +164,5 @@ module Awestruct
156
164
  self.object_id == other_page.object_id
157
165
  end
158
166
 
159
-
160
167
  end
161
-
162
168
  end
@@ -8,7 +8,7 @@ module Awestruct
8
8
  attr_reader :root_dir
9
9
 
10
10
  def initialize(site, target=:pages)
11
- @site = site
11
+ @site = site
12
12
  @target = target
13
13
 
14
14
  @root_dir = site.config.dir
@@ -18,31 +18,33 @@ module Awestruct
18
18
  end
19
19
 
20
20
  def ignore?(path)
21
- site.config.ignore.include?( path )
21
+ site.config.ignore.include?( path )
22
22
  end
23
23
 
24
24
  def load_all(prepare=:inline)
25
+ raise "No such dir #{root_dir}" unless File.directory?(root_dir)
25
26
  pages = []
26
27
  root_dir.find do |path|
27
28
  if ( path == root_dir )
28
- #puts "skip #{path}"
29
+ puts "skip #{path}" if (site.config.verbose)
29
30
  next
30
31
  end
31
32
  basename = File.basename( path )
32
33
  if ( basename == '.htaccess' )
33
34
  #special case
34
35
  elsif ( basename =~ /^[_.]/ )
35
- #puts "skip #{path} and prune"
36
+ puts "skip #{path} and prune" if (site.config.verbose)
36
37
  Find.prune
37
38
  next
38
39
  end
39
40
  relative_path = path.relative_path_from( root_dir ).to_s
40
41
  if ignore?(relative_path)
41
- #puts "skip ignored #{path} and prune"
42
+ puts "skip ignored #{path} and prune" if (site.config.verbose)
42
43
  Find.prune
43
44
  next
44
45
  end
45
46
  unless path.directory?
47
+ puts "loading #{relative_path}" if (site.config.verbose)
46
48
  page = load_page( path, prepare )
47
49
  if ( page )
48
50
  #puts "loaded! #{path} and added to site"
@@ -53,7 +55,7 @@ module Awestruct
53
55
  end
54
56
  end
55
57
  if ( prepare == :post )
56
- pages.each{|p| p.prepare!}
58
+ pages.each{|p| p.prepare!}
57
59
  end
58
60
  end
59
61
 
@@ -73,7 +75,7 @@ module Awestruct
73
75
  end
74
76
  p.track_dependencies!
75
77
  if prepare == :inline
76
- p.prepare!
78
+ p.prepare!
77
79
  end
78
80
  p
79
81
  end
@@ -8,9 +8,9 @@ module Awestruct
8
8
  end
9
9
 
10
10
  def call(env)
11
- path = env['REQUEST_PATH']
11
+ path = env['PATH_INFO']
12
12
  fs_path = File.join( @doc_root, path )
13
-
13
+
14
14
  if ( File.directory?( fs_path ) )
15
15
  if ( ! ( path =~ %r(/$) ) )
16
16
  return [ 301,
@@ -21,20 +21,31 @@ module Awestruct
21
21
  end
22
22
  end
23
23
 
24
+ # There must be a Content-Type, except when the Status is 1xx,
25
+ # 204 or 304, in which case there must be none given.
26
+ #
27
+ # The Body must respond to each and must only yield String
28
+ # values. The Body itself should not be an instance of String,
29
+ # as this will break in Ruby 1.9.
24
30
  if ( File.exist?( fs_path ) )
31
+ body = read_content( fs_path )
32
+ content_type = ::Rack::Mime.mime_type( File.extname(fs_path) )
33
+ length = body.size.to_s
25
34
  [ 200,
26
- {},
27
- read_content( fs_path ) ]
35
+ {"Content-Type" => content_type, "Content-Length" => length},
36
+ [body] ]
28
37
  else
38
+ body = read_error_document(path)
39
+ length = body.size.to_s
29
40
  [ 404,
30
- {},
31
- read_error_document(path) ]
41
+ {"Content-Type" => 'text/plain', "Content-Length" => length},
42
+ [body] ]
32
43
  end
33
44
  end
34
45
 
35
46
  def read_error_document( path )
36
47
  doc_path = nil
37
- htaccess = File.join( @doc_root, '.htaccess' )
48
+ htaccess = File.join( @doc_root, '.htaccess' )
38
49
  if ( File.exist?( htaccess ) )
39
50
  File.open( htaccess ).each_line do |line|
40
51
  if ( line =~ %r(^.*ErrorDocument[ \t]+404[ \t]+(.+)$) )
@@ -44,7 +55,7 @@ module Awestruct
44
55
  end
45
56
  if ( doc_path )
46
57
  fs_doc_path = File.join( @doc_root, doc_path )
47
- return read_content( fs_doc_path ) if File.exist?( fs_doc_path )
58
+ return read_content( fs_doc_path ) if File.exist?( fs_doc_path )
48
59
  end
49
60
  "404: Not Found: #{path}"
50
61
  end
@@ -9,6 +9,7 @@ module Awestruct
9
9
  attr_reader :dir
10
10
  attr_reader :output_dir
11
11
  attr_reader :tmp_dir
12
+ attr_reader :timestamp
12
13
 
13
14
  attr_reader :pages
14
15
  attr_reader :layouts
@@ -22,6 +23,7 @@ module Awestruct
22
23
  @layouts = Layouts.new
23
24
  @config = config
24
25
  self.encoding = false
26
+ @timestamp = Time.now.to_i
25
27
  end
26
28
 
27
29
  def inspect
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Awestruct
3
- VERSION='0.4.6'
3
+ VERSION='0.4.7'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awestruct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-10 00:00:00.000000000 Z
12
+ date: 2012-11-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hpricot
@@ -59,6 +59,22 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 3.1.15
62
+ - !ruby/object:Gem::Dependency
63
+ name: mustache
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 0.99.4
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 0.99.4
62
78
  - !ruby/object:Gem::Dependency
63
79
  name: rdiscount
64
80
  requirement: !ruby/object:Gem::Requirement
@@ -242,7 +258,7 @@ dependencies:
242
258
  requirements:
243
259
  - - ~>
244
260
  - !ruby/object:Gem::Version
245
- version: 0.4.2
261
+ version: 0.5.0
246
262
  type: :runtime
247
263
  prerelease: false
248
264
  version_requirements: !ruby/object:Gem::Requirement
@@ -250,7 +266,7 @@ dependencies:
250
266
  requirements:
251
267
  - - ~>
252
268
  - !ruby/object:Gem::Version
253
- version: 0.4.2
269
+ version: 0.5.0
254
270
  - !ruby/object:Gem::Dependency
255
271
  name: thin
256
272
  requirement: !ruby/object:Gem::Requirement
@@ -258,7 +274,7 @@ dependencies:
258
274
  requirements:
259
275
  - - ~>
260
276
  - !ruby/object:Gem::Version
261
- version: 1.3.1
277
+ version: 1.4.1
262
278
  type: :runtime
263
279
  prerelease: false
264
280
  version_requirements: !ruby/object:Gem::Requirement
@@ -266,7 +282,7 @@ dependencies:
266
282
  requirements:
267
283
  - - ~>
268
284
  - !ruby/object:Gem::Version
269
- version: 1.3.1
285
+ version: 1.4.1
270
286
  - !ruby/object:Gem::Dependency
271
287
  name: eventmachine
272
288
  requirement: !ruby/object:Gem::Requirement
@@ -274,7 +290,7 @@ dependencies:
274
290
  requirements:
275
291
  - - ~>
276
292
  - !ruby/object:Gem::Version
277
- version: 1.0.0.beta.4
293
+ version: 1.0.0.rc.4
278
294
  type: :runtime
279
295
  prerelease: false
280
296
  version_requirements: !ruby/object:Gem::Requirement
@@ -282,7 +298,7 @@ dependencies:
282
298
  requirements:
283
299
  - - ~>
284
300
  - !ruby/object:Gem::Version
285
- version: 1.0.0.beta.4
301
+ version: 1.0.0.rc.4
286
302
  description: Awestruct is a framework for creating static HTML sites.
287
303
  email: bob@mcwhirter.org
288
304
  executables:
@@ -348,6 +364,7 @@ files:
348
364
  - lib/awestruct/handlers/javascript_handler.rb
349
365
  - lib/awestruct/handlers/layout_handler.rb
350
366
  - lib/awestruct/handlers/markdown_handler.rb
367
+ - lib/awestruct/handlers/mustache_handler.rb
351
368
  - lib/awestruct/handlers/no_op_handler.rb
352
369
  - lib/awestruct/handlers/orgmode_handler.rb
353
370
  - lib/awestruct/handlers/page_delegating_handler.rb
@@ -390,7 +407,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
390
407
  version: '0'
391
408
  segments:
392
409
  - 0
393
- hash: 2038521817451940895
410
+ hash: -1162804171460425165
394
411
  required_rubygems_version: !ruby/object:Gem::Requirement
395
412
  none: false
396
413
  requirements:
@@ -399,10 +416,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
399
416
  version: '0'
400
417
  segments:
401
418
  - 0
402
- hash: 2038521817451940895
419
+ hash: -1162804171460425165
403
420
  requirements: []
404
421
  rubyforge_project:
405
- rubygems_version: 1.8.24
422
+ rubygems_version: 1.8.23
406
423
  signing_key:
407
424
  specification_version: 3
408
425
  summary: Static site-baking utility