nanoc 1.6.2 → 2.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.
Files changed (51) hide show
  1. data/ChangeLog +27 -0
  2. data/Rakefile +34 -27
  3. data/bin/nanoc +153 -49
  4. data/lib/nanoc.rb +15 -33
  5. data/lib/nanoc/base/auto_compiler.rb +124 -0
  6. data/lib/nanoc/base/compiler.rb +55 -0
  7. data/lib/nanoc/base/core_ext/hash.rb +34 -0
  8. data/lib/nanoc/base/data_source.rb +53 -0
  9. data/lib/nanoc/base/enhancements.rb +89 -0
  10. data/lib/nanoc/base/filter.rb +16 -0
  11. data/lib/nanoc/base/layout_processor.rb +33 -0
  12. data/lib/nanoc/base/page.rb +155 -0
  13. data/lib/nanoc/base/page_proxy.rb +31 -0
  14. data/lib/nanoc/base/plugin.rb +19 -0
  15. data/lib/nanoc/base/plugin_manager.rb +33 -0
  16. data/lib/nanoc/base/site.rb +143 -0
  17. data/lib/nanoc/data_sources/database.rb +259 -0
  18. data/lib/nanoc/data_sources/filesystem.rb +308 -0
  19. data/lib/nanoc/data_sources/trivial.rb +145 -0
  20. data/lib/nanoc/filters/erb.rb +34 -0
  21. data/lib/nanoc/filters/haml.rb +16 -0
  22. data/lib/nanoc/filters/markaby.rb +15 -0
  23. data/lib/nanoc/filters/markdown.rb +13 -0
  24. data/lib/nanoc/filters/rdoc.rb +14 -0
  25. data/lib/nanoc/filters/smartypants.rb +13 -0
  26. data/lib/nanoc/filters/textile.rb +13 -0
  27. data/lib/nanoc/layout_processors/erb.rb +35 -0
  28. data/lib/nanoc/layout_processors/haml.rb +18 -0
  29. data/lib/nanoc/layout_processors/markaby.rb +16 -0
  30. metadata +37 -30
  31. data/lib/nanoc/compiler.rb +0 -145
  32. data/lib/nanoc/core_ext.rb +0 -1
  33. data/lib/nanoc/core_ext/array.rb +0 -17
  34. data/lib/nanoc/core_ext/hash.rb +0 -43
  35. data/lib/nanoc/core_ext/string.rb +0 -13
  36. data/lib/nanoc/core_ext/yaml.rb +0 -10
  37. data/lib/nanoc/creator.rb +0 -180
  38. data/lib/nanoc/enhancements.rb +0 -101
  39. data/lib/nanoc/filters.rb +0 -7
  40. data/lib/nanoc/filters/eruby_filter.rb +0 -39
  41. data/lib/nanoc/filters/haml_filter.rb +0 -18
  42. data/lib/nanoc/filters/liquid_filter.rb +0 -47
  43. data/lib/nanoc/filters/markaby_filter.rb +0 -15
  44. data/lib/nanoc/filters/markdown_filter.rb +0 -13
  45. data/lib/nanoc/filters/rdoc_filter.rb +0 -15
  46. data/lib/nanoc/filters/sass_filter.rb +0 -13
  47. data/lib/nanoc/filters/smartypants_filter.rb +0 -13
  48. data/lib/nanoc/filters/textile_filter.rb +0 -13
  49. data/lib/nanoc/page.rb +0 -171
  50. data/lib/nanoc/page_drop.rb +0 -18
  51. data/lib/nanoc/page_proxy.rb +0 -30
@@ -0,0 +1,34 @@
1
+ module Nanoc::Filter::ERB
2
+
3
+ class ERBContext
4
+
5
+ def initialize(hash)
6
+ hash.each_pair do |key, value|
7
+ instance_variable_set('@' + key.to_s, value)
8
+ end
9
+ end
10
+
11
+ def get_binding
12
+ binding
13
+ end
14
+
15
+ end
16
+
17
+ class ERBFilter < Nanoc::Filter
18
+
19
+ identifiers :erb, :eruby
20
+
21
+ def run(content)
22
+ nanoc_require 'erb'
23
+
24
+ # Create context
25
+ assigns = { :page => @page, :pages => @pages, :config => @config, :site => @site }
26
+ context = ERBContext.new(assigns)
27
+
28
+ # Get result
29
+ ::ERB.new(content).result(context.get_binding)
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,16 @@
1
+ module Nanoc::Filter::Haml
2
+ class HamlFilter < Nanoc::Filter
3
+
4
+ identifiers :haml
5
+
6
+ def run(content)
7
+ nanoc_require 'haml'
8
+
9
+ options = @page.haml_options || {}
10
+ options[:locals] = { :page => @page, :pages => @pages, :config => @config, :site => @site }
11
+
12
+ ::Haml::Engine.new(content, options).to_html
13
+ end
14
+
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ module Nanoc::Filter::Markaby
2
+ class MarkabyFilter < Nanoc::Filter
3
+
4
+ identifiers :markaby
5
+
6
+ def run(content)
7
+ nanoc_require 'markaby'
8
+
9
+ assigns = { :page => @page, :pages => @pages, :config => @config, :site => @site }
10
+
11
+ ::Markaby::Builder.new(assigns).instance_eval(content).to_s
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module Nanoc::Filter::Markdown
2
+ class MarkdownFilter < Nanoc::Filter
3
+
4
+ identifiers :markdown, :bluecloth
5
+
6
+ def run(content)
7
+ nanoc_require 'bluecloth'
8
+
9
+ ::BlueCloth.new(content).to_html
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module Nanoc::Filter::RDoc
2
+ class RDocFilter < Nanoc::Filter
3
+
4
+ identifiers :rdoc
5
+
6
+ def run(content)
7
+ nanoc_require 'rdoc/markup/simple_markup'
8
+ nanoc_require 'rdoc/markup/simple_markup/to_html'
9
+
10
+ ::SM::SimpleMarkup.new.convert(content, SM::ToHtml.new)
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,13 @@
1
+ module Nanoc::Filter::SmartyPants
2
+ class SmartyPantsFilter < Nanoc::Filter
3
+
4
+ identifiers :smartypants, :rubypants
5
+
6
+ def run(content)
7
+ nanoc_require 'rubypants'
8
+
9
+ ::RubyPants.new(content).to_html
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Nanoc::Filter::Textile
2
+ class TextileFilter < Nanoc::Filter
3
+
4
+ identifiers :textile, :redcloth
5
+
6
+ def run(content)
7
+ nanoc_require 'redcloth'
8
+
9
+ ::RedCloth.new(content).to_html
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,35 @@
1
+ module Nanoc::LayoutProcessor::ERB
2
+
3
+ class ERBContext
4
+
5
+ def initialize(hash)
6
+ hash.each_pair do |key, value|
7
+ instance_variable_set('@' + key.to_s, value)
8
+ end
9
+ end
10
+
11
+ def get_binding
12
+ binding
13
+ end
14
+
15
+ end
16
+
17
+ class ERBLayoutProcessor < Nanoc::LayoutProcessor
18
+
19
+ identifiers :erb, :eruby
20
+ extensions '.erb', '.rhtml'
21
+
22
+ def run(layout)
23
+ nanoc_require 'erb'
24
+
25
+ # Create context
26
+ assigns = @other_assigns.merge({ :page => @page, :pages => @pages, :config => @config, :site => @site })
27
+ context = ERBContext.new(assigns)
28
+
29
+ # Get result
30
+ ::ERB.new(layout).result(context.get_binding)
31
+ end
32
+
33
+ end
34
+
35
+ end
@@ -0,0 +1,18 @@
1
+ module Nanoc::LayoutProcessor::Haml
2
+ class HamlLayoutProcessor < Nanoc::LayoutProcessor
3
+
4
+ identifiers :haml
5
+ extensions '.haml'
6
+
7
+ def run(layout)
8
+ nanoc_require 'haml'
9
+
10
+ options = @page[:haml_options] || {}
11
+ assigns = @other_assigns.merge({ :page => @page, :pages => @pages, :config => @config, :site => @site })
12
+ options[:locals] = assigns
13
+
14
+ ::Haml::Engine.new(layout, options).to_html
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ module Nanoc::LayoutProcessor::Markaby
2
+ class MarkabyLayoutProcessor < Nanoc::LayoutProcessor
3
+
4
+ identifiers :markaby
5
+ extensions '.mab'
6
+
7
+ def run(layout)
8
+ nanoc_require 'markaby'
9
+
10
+ assigns = @other_assigns.merge({ :page => @page, :pages => @pages, :config => @config, :site => @site })
11
+
12
+ ::Markaby::Builder.new(assigns).instance_eval(layout).to_s
13
+ end
14
+
15
+ end
16
+ end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
2
+ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: nanoc
5
5
  version: !ruby/object:Gem::Version
6
- version: 1.6.2
7
- date: 2007-10-23 00:00:00 +02:00
8
- summary: a CMS that doesn't run on your server
6
+ version: "2.0"
7
+ date: 2007-12-25 00:00:00 +01:00
8
+ summary: a tool that runs on your local computer and compiles Markdown, Textile, Haml, ... documents into static web pages
9
9
  require_paths:
10
10
  - lib
11
11
  email: denis.defreyne@stoneship.org
12
12
  homepage: http://nanoc.stoneship.org/
13
- rubyforge_project:
14
- description: a CMS that doesn't run on your server
13
+ rubyforge_project: nanoc
14
+ description: a tool that runs on your local computer and compiles Markdown, Textile, Haml, ... documents into static web pages
15
15
  autorequire:
16
16
  default_executable:
17
17
  bindir: bin
@@ -26,8 +26,8 @@ platform: ruby
26
26
  signing_key:
27
27
  cert_chain:
28
28
  post_install_message:
29
- authors: []
30
-
29
+ authors:
30
+ - Denis Defreyne
31
31
  files:
32
32
  - README
33
33
  - LICENSE
@@ -35,29 +35,36 @@ files:
35
35
  - Rakefile
36
36
  - bin/nanoc
37
37
  - lib/nanoc
38
- - lib/nanoc/compiler.rb
39
- - lib/nanoc/core_ext
40
- - lib/nanoc/core_ext/array.rb
41
- - lib/nanoc/core_ext/hash.rb
42
- - lib/nanoc/core_ext/string.rb
43
- - lib/nanoc/core_ext/yaml.rb
44
- - lib/nanoc/core_ext.rb
45
- - lib/nanoc/creator.rb
46
- - lib/nanoc/enhancements.rb
38
+ - lib/nanoc/base
39
+ - lib/nanoc/base/auto_compiler.rb
40
+ - lib/nanoc/base/compiler.rb
41
+ - lib/nanoc/base/core_ext
42
+ - lib/nanoc/base/core_ext/hash.rb
43
+ - lib/nanoc/base/data_source.rb
44
+ - lib/nanoc/base/enhancements.rb
45
+ - lib/nanoc/base/filter.rb
46
+ - lib/nanoc/base/layout_processor.rb
47
+ - lib/nanoc/base/page.rb
48
+ - lib/nanoc/base/page_proxy.rb
49
+ - lib/nanoc/base/plugin.rb
50
+ - lib/nanoc/base/plugin_manager.rb
51
+ - lib/nanoc/base/site.rb
52
+ - lib/nanoc/data_sources
53
+ - lib/nanoc/data_sources/database.rb
54
+ - lib/nanoc/data_sources/filesystem.rb
55
+ - lib/nanoc/data_sources/trivial.rb
47
56
  - lib/nanoc/filters
48
- - lib/nanoc/filters/eruby_filter.rb
49
- - lib/nanoc/filters/haml_filter.rb
50
- - lib/nanoc/filters/liquid_filter.rb
51
- - lib/nanoc/filters/markaby_filter.rb
52
- - lib/nanoc/filters/markdown_filter.rb
53
- - lib/nanoc/filters/rdoc_filter.rb
54
- - lib/nanoc/filters/sass_filter.rb
55
- - lib/nanoc/filters/smartypants_filter.rb
56
- - lib/nanoc/filters/textile_filter.rb
57
- - lib/nanoc/filters.rb
58
- - lib/nanoc/page.rb
59
- - lib/nanoc/page_drop.rb
60
- - lib/nanoc/page_proxy.rb
57
+ - lib/nanoc/filters/erb.rb
58
+ - lib/nanoc/filters/haml.rb
59
+ - lib/nanoc/filters/markaby.rb
60
+ - lib/nanoc/filters/markdown.rb
61
+ - lib/nanoc/filters/rdoc.rb
62
+ - lib/nanoc/filters/smartypants.rb
63
+ - lib/nanoc/filters/textile.rb
64
+ - lib/nanoc/layout_processors
65
+ - lib/nanoc/layout_processors/erb.rb
66
+ - lib/nanoc/layout_processors/haml.rb
67
+ - lib/nanoc/layout_processors/markaby.rb
61
68
  - lib/nanoc.rb
62
69
  test_files: []
63
70
 
@@ -1,145 +0,0 @@
1
- module Nanoc
2
- class Compiler
3
-
4
- DEFAULT_CONFIG = {
5
- :output_dir => 'output',
6
- :eruby_engine => 'erb'
7
- }
8
-
9
- FILE_TYPES = {
10
- '.erb' => :eruby,
11
- '.rhtml' => :eruby,
12
- '.haml' => :haml,
13
- '.mab' => :markaby,
14
- '.liquid' => :liquid
15
- }
16
-
17
- PAGE_DEFAULTS = {
18
- :custom_path => nil,
19
- :filename => 'index',
20
- :extension => 'html',
21
- :filters => [],
22
- :is_draft => false,
23
- :layout => 'default'
24
- }
25
-
26
- attr_reader :config, :stack, :pages
27
-
28
- def initialize
29
- @filters = {}
30
- end
31
-
32
- def run
33
- # Make sure we're in a nanoc site
34
- Nanoc.ensure_in_site
35
-
36
- # Load some configuration stuff
37
- @config = DEFAULT_CONFIG.merge(YAML.load_file_and_clean('config.yaml'))
38
- @global_page = PAGE_DEFAULTS.merge(YAML.load_file_and_clean('meta.yaml'))
39
-
40
- # Require all Ruby source files in lib/
41
- Dir['lib/*.rb'].each { |f| require f }
42
-
43
- # Create output directory if necessary
44
- FileUtils.mkdir_p(@config[:output_dir])
45
-
46
- # Get all pages
47
- @pages = find_uncompiled_pages
48
-
49
- # Filter, layout, and filter again
50
- filter(:pre)
51
- layout
52
- filter(:post)
53
-
54
- # Save pages
55
- save_pages
56
- end
57
-
58
- # Filter management
59
-
60
- def register_filter(name, &block)
61
- @filters[name.to_sym] = block
62
- end
63
-
64
- def filter_named(name)
65
- @filters[name.to_sym]
66
- end
67
-
68
- private
69
-
70
- # Main methods
71
-
72
- def find_uncompiled_pages
73
- # Read all meta files
74
- Dir['content/**/meta.yaml'].inject([]) do |pages, filename|
75
- # Read the meta file
76
- hash = @global_page.merge(YAML.load_file_and_clean(filename))
77
-
78
- # Fix the path
79
- hash[:path] = filename.sub(/^content/, '').sub('meta.yaml', '')
80
-
81
- # Convert to a Page instance
82
- page = Page.new(hash, self)
83
-
84
- # Get the content filename
85
- page.content_filename = content_filename_for_meta_filename(filename)
86
-
87
- # Skip drafts
88
- hash[:is_draft] ? pages : pages + [ page ]
89
- end
90
- end
91
-
92
- def filter(stage)
93
- # Reset filter stack
94
- @stack = []
95
-
96
- # Prepare pages
97
- @pages.each do |page|
98
- page.stage = stage
99
- page.is_filtered = false
100
- end
101
-
102
- # Filter pages
103
- @pages.each { |page| page.filter! }
104
- end
105
-
106
- def layout
107
- # For each page (ignoring drafts)
108
- @pages.reject { |page| page.attributes[:skip_output] }.each do |page|
109
- begin
110
- # Layout the page
111
- page.layout!
112
- rescue => exception
113
- handle_exception(exception, "layouting page '#{page.content_filename}' in layout '#{page.attributes[:layout]}'")
114
- end
115
- end
116
- end
117
-
118
- def save_pages
119
- @pages.reject { |page| page.attributes[:skip_output] }.each do |page|
120
- # Write page with layout
121
- FileManager.create_file(page.path) { page.content }
122
- end
123
- end
124
-
125
- # Helper methods
126
-
127
- def content_filename_for_meta_filename(filename)
128
- # Find all files with base name of parent directory
129
- content_filenames = Dir[filename.sub('meta.yaml', File.basename(File.dirname(filename)) + '.*')]
130
-
131
- # Find all index.* files (used to be a fallback for nanoc 1.0, kinda...)
132
- content_filenames += Dir["#{File.dirname(filename)}/index.*"]
133
-
134
- # Reject backups
135
- content_filenames.reject! { |f| f =~ /~$/ }
136
-
137
- # Make sure there is only one content file
138
- content_filenames.ensure_single('content files', File.dirname(filename))
139
-
140
- # Return the first (and only one)
141
- content_filenames[0]
142
- end
143
-
144
- end
145
- end
@@ -1 +0,0 @@
1
- Dir[File.join(File.dirname(__FILE__), 'core_ext', '*.rb')].each { |f| require f }
@@ -1,17 +0,0 @@
1
- class Array
2
- # Ensures that the array contains only one element
3
- def ensure_single(a_noun, a_context)
4
- if self.size != 1
5
- $stderr.puts "ERROR: expected 1 #{a_noun}, found #{self.size} (#{a_context})" unless $quiet
6
- exit
7
- end
8
- end
9
-
10
- # Pushes the object on the stack, yields, and pops stack
11
- def pushing(obj)
12
- push(obj)
13
- yield
14
- ensure
15
- pop
16
- end
17
- end