hx 0.4.1 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -6,8 +6,12 @@ begin
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "hx"
8
8
  gem.executables << 'hx'
9
- gem.summary = %Q{A miniature site generator.}
10
- gem.description = %Q{A miniature site generator.}
9
+ gem.summary = %Q{A miniature static site generator.}
10
+ gem.description = <<EOS
11
+ Hx is a simple static site generator in the spirit of Hobix which reads a
12
+ YAML configuration file, constructs a filter graph, and generates output
13
+ files.
14
+ EOS
11
15
  gem.email = "mental@rydia.net"
12
16
  gem.homepage = "http://github.com/mental/hx"
13
17
  gem.authors = ["MenTaLguY"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.1
1
+ 0.5.0
data/lib/hx.rb CHANGED
@@ -478,7 +478,17 @@ class FileBuilder
478
478
  end
479
479
 
480
480
  def build_file(path, entry)
481
+ build_file_helper(path, entry, false)
482
+ end
483
+
484
+ def build_file_if_updated(path, entry)
485
+ build_file_helper(path, entry, true)
486
+ end
487
+
488
+ def build_file_helper(path, entry, update_only)
481
489
  filename = @output_dir + path
490
+ return self if update_only and filename.exist? and \
491
+ entry['updated'] and filename.mtime >= entry['updated']
482
492
  dirname = filename.parent
483
493
  dirname.mkpath()
484
494
  filename.open("wb") do |stream|
@@ -486,6 +496,35 @@ class FileBuilder
486
496
  end
487
497
  self
488
498
  end
499
+ private :build_file_helper
500
+ end
501
+
502
+ class LazyContent
503
+ def initialize(&block)
504
+ raise ArgumentError, "No block given" unless block
505
+ @content = nil
506
+ @block = block
507
+ end
508
+
509
+ def to_s
510
+ if @block
511
+ @content = @block.call
512
+ @block = nil
513
+ end
514
+ @content
515
+ end
516
+
517
+ def to_yaml(*args)
518
+ to_s.to_yaml(*args)
519
+ end
520
+
521
+ def to_json(*args)
522
+ to_s.to_json(*args)
523
+ end
524
+
525
+ def to_liquid(*args)
526
+ to_s.to_liquid(*args)
527
+ end
489
528
  end
490
529
 
491
530
  end
@@ -79,7 +79,7 @@ def self.main(*args)
79
79
  site = Hx::Site.load(stream, options.config_file)
80
80
  end
81
81
 
82
- subcommand = args.shift || "regen"
82
+ subcommand = args.shift || "upgen"
83
83
  method_name = "cmd_#{subcommand}".intern
84
84
  begin
85
85
  m = method(method_name)
@@ -90,11 +90,23 @@ def self.main(*args)
90
90
  end
91
91
 
92
92
  def self.cmd_regen(site)
93
+ do_gen(site, false)
94
+ end
95
+
96
+ def self.cmd_upgen(site)
97
+ do_gen(site, true)
98
+ end
99
+
100
+ def self.do_gen(site, update_only)
93
101
  output_dir = Hx.get_pathname(site.options, :output_dir)
94
102
  builder = Hx::FileBuilder.new(output_dir.to_s)
95
103
  site.each_entry do |path, entry|
96
104
  puts "===> #{path}"
97
- builder.build_file(path, entry)
105
+ if update_only
106
+ builder.build_file_if_updated(path, entry)
107
+ else
108
+ builder.build_file(path, entry)
109
+ end
98
110
  end
99
111
  end
100
112
 
@@ -56,9 +56,9 @@ class RecursiveIndex
56
56
  index_path = (components + ["index"]).join("/")
57
57
  index = indexes[index_path]
58
58
  index['items'] << {'path' => path, 'entry' => entry}
59
- if entry['modified'] and
60
- (not index['modified'] or entry['modified'] > index['modified'])
61
- index['modified'] = entry['modified']
59
+ if entry['updated'] and
60
+ (not index['updated'] or entry['updated'] > index['updated'])
61
+ index['updated'] = entry['updated']
62
62
  end
63
63
  end
64
64
  end
@@ -85,12 +85,14 @@ class LiquidTemplate
85
85
  output_path = path
86
86
  end
87
87
  output_entry = entry.dup
88
- output_entry['content'] = @template.render(
89
- 'now' => Time.now,
90
- 'options' => @options,
91
- 'path' => path,
92
- 'entry' => entry
93
- )
88
+ output_entry['content'] = Hx::LazyContent.new do
89
+ @template.render(
90
+ 'now' => Time.now,
91
+ 'options' => @options,
92
+ 'path' => path,
93
+ 'entry' => entry
94
+ )
95
+ end
94
96
  yield output_path, output_entry
95
97
  end
96
98
  self
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - MenTaLguY
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-06 00:00:00 -05:00
12
+ date: 2010-02-07 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -22,7 +22,11 @@ dependencies:
22
22
  - !ruby/object:Gem::Version
23
23
  version: 1.2.9
24
24
  version:
25
- description: A miniature site generator.
25
+ description: |
26
+ Hx is a simple static site generator in the spirit of Hobix which reads a
27
+ YAML configuration file, constructs a filter graph, and generates output
28
+ files.
29
+
26
30
  email: mental@rydia.net
27
31
  executables:
28
32
  - hx
@@ -85,7 +89,7 @@ rubyforge_project:
85
89
  rubygems_version: 1.3.5
86
90
  signing_key:
87
91
  specification_version: 3
88
- summary: A miniature site generator.
92
+ summary: A miniature static site generator.
89
93
  test_files:
90
94
  - spec/spec_helper.rb
91
95
  - spec/cache_spec.rb