hx 0.4.1 → 0.5.0

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.
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