nanoc 1.6.2 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
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