matflores-jekyll 0.4.3 → 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/History.txt CHANGED
@@ -1,4 +1,4 @@
1
- ==
1
+ == 0.5.0 / 2009-04-07
2
2
  * Minor Enhancements
3
3
  * Ability to set post categories via YAML [github.com/qrush]
4
4
  * Ability to set prevent a post from publishing via YAML [github.com/qrush]
@@ -13,6 +13,8 @@
13
13
  * Prevent _posts from being copied to the destination directory [github.com/bdimcheff]
14
14
  * Refactors
15
15
  * Factored the filtering code into a method [github.com/Chrononaut]
16
+ * Fix tests and convert to Shoulda [github.com/qrush, github.com/technicalpickles]
17
+ * Add Cucumber acceptance test suite [github.com/qrush, github.com/technicalpickles]
16
18
 
17
19
  == 0.4.1
18
20
  * Minor Enhancements
data/README.textile CHANGED
@@ -174,6 +174,43 @@ leaf directory resulting in URLs like 2008/11/17/blogging-like-a-hacker/.
174
174
 
175
175
  $ jekyll --permalink [date|none|pretty]
176
176
 
177
+ h2. Configuration File
178
+
179
+ All of the options listed above can be specified on a site-by-site basis in
180
+ a '_config.yml' file at the root of the site's source. As the filename
181
+ suggests, the configuration is given in "YAML":http://www.yaml.org/. As
182
+ well as all of the options discussed in the last section, there are a few
183
+ additional options:
184
+
185
+ destination: [PATH] # Specify where the site should be rendered
186
+ markdown: [maruku|rdiscount] # Which markdown renderer to use?
187
+
188
+ maruku: # This is a YAML hash for Maruku settings
189
+ use_divs: [BOOLEAN] # Use the div element Maruku extension
190
+ use_tex: [BOOLEAN] # Use the LaTeX extension to Maruku
191
+ png_dir: [PATH] # Where should the math PNGs be stored?
192
+ png_url: [URL] # A relative URL for the PNGs
193
+
194
+ The default configuration is shown below as in YAML format:
195
+
196
+ destination: ./_site
197
+ auto: false
198
+ lsi: false
199
+ server_port: 4000
200
+ pygments: false
201
+ markdown: maruku
202
+ permalink: date
203
+
204
+ maruku:
205
+ use_tex: false
206
+ use_divs: false
207
+ png_dir: images/latex
208
+ png_url: /images/latex
209
+
210
+ Parameters set in a configuration file override the default values. Parameters
211
+ set using command line options override both the default values and those set
212
+ in a configuration file.
213
+
177
214
  h2. Data
178
215
 
179
216
  Jekyll traverses your site looking for files to process. Any files with YAML
data/Rakefile ADDED
@@ -0,0 +1,91 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ begin
6
+ gem 'jeweler', '>= 0.11.0'
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |s|
9
+ s.name = "jekyll"
10
+ s.summary = %Q{Jekyll is a simple, blog aware, static site generator.}
11
+ s.email = "tom@mojombo.com"
12
+ s.homepage = "http://github.com/mojombo/jekyll"
13
+ s.description = "Jekyll is a simple, blog aware, static site generator."
14
+ s.authors = ["Tom Preston-Werner"]
15
+ s.rubyforge_project = "jekyll"
16
+ s.files.exclude 'test/dest'
17
+ s.test_files.exclude 'test/dest'
18
+ s.add_dependency('RedCloth', '>= 4.0.4')
19
+ s.add_dependency('liquid', '>= 1.9.0')
20
+ s.add_dependency('classifier', '>= 1.3.1')
21
+ s.add_dependency('maruku', '>= 0.5.9')
22
+ s.add_dependency('directory_watcher', '>= 1.1.1')
23
+ s.add_dependency('open4', '>= 0.9.6')
24
+ end
25
+ rescue LoadError
26
+ puts "Jeweler not available. Install it with: sudo gem install jeweler --version '>= 0.11.0'"
27
+ exit(1)
28
+ end
29
+
30
+ Rake::TestTask.new do |t|
31
+ t.libs << 'lib'
32
+ t.pattern = 'test/**/test_*.rb'
33
+ t.verbose = false
34
+ end
35
+
36
+ Rake::RDocTask.new do |rdoc|
37
+ rdoc.rdoc_dir = 'rdoc'
38
+ rdoc.title = 'jekyll'
39
+ rdoc.options << '--line-numbers' << '--inline-source'
40
+ rdoc.rdoc_files.include('README*')
41
+ rdoc.rdoc_files.include('lib/**/*.rb')
42
+ end
43
+
44
+ begin
45
+ require 'rcov/rcovtask'
46
+ Rcov::RcovTask.new do |t|
47
+ t.libs << 'test'
48
+ t.test_files = FileList['test/**/test_*.rb']
49
+ t.verbose = true
50
+ end
51
+ rescue LoadError
52
+ end
53
+
54
+ task :default => [:test, :features]
55
+
56
+ # console
57
+
58
+ desc "Open an irb session preloaded with this library"
59
+ task :console do
60
+ sh "irb -rubygems -I lib -r jekyll.rb"
61
+ end
62
+
63
+ # converters
64
+
65
+ namespace :convert do
66
+ desc "Migrate from mephisto in the current directory"
67
+ task :mephisto do
68
+ sh %q(ruby -r './lib/jekyll/converters/mephisto' -e 'Jekyll::Mephisto.postgres(:database => "#{ENV["DB"]}")')
69
+ end
70
+ desc "Migrate from Movable Type in the current directory"
71
+ task :mt do
72
+ sh %q(ruby -r './lib/jekyll/converters/mt' -e 'Jekyll::MT.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")')
73
+ end
74
+ desc "Migrate from Typo in the current directory"
75
+ task :typo do
76
+ sh %q(ruby -r './lib/jekyll/converters/typo' -e 'Jekyll::Typo.process("#{ENV["DB"]}", "#{ENV["USER"]}", "#{ENV["PASS"]}")')
77
+ end
78
+ end
79
+
80
+ begin
81
+ require 'cucumber/rake/task'
82
+
83
+ Cucumber::Rake::Task.new(:features) do |t|
84
+ t.cucumber_opts = "--format pretty"
85
+ end
86
+ rescue LoadError
87
+ desc 'Cucumber rake task not available'
88
+ task :features do
89
+ abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
90
+ end
91
+ end
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :minor: 4
3
- :patch: 1
4
2
  :major: 0
3
+ :minor: 5
4
+ :patch: 0
data/bin/jekyll CHANGED
@@ -9,62 +9,78 @@ Basic Command Line Usage:
9
9
  jekyll # . -> ./_site
10
10
  jekyll <path to write generated site> # . -> <path>
11
11
  jekyll <path to source> <path to write generated site> # <path> -> <path>
12
-
13
- Options:
12
+
13
+ Configuration is read from '<source>/_config.yaml' but can be overriden
14
+ using the following options:
15
+
14
16
  HELP
15
17
 
16
18
  require 'optparse'
17
19
  require 'jekyll'
18
20
 
21
+ exec = {}
19
22
  options = {}
20
-
21
23
  opts = OptionParser.new do |opts|
22
24
  opts.banner = help
23
25
 
24
26
  opts.on("--auto", "Auto-regenerate") do
25
- options[:auto] = true
27
+ options['auto'] = true
28
+ end
29
+
30
+ opts.on("--no-auto", "No auto-regenerate") do
31
+ options['auto'] = false
26
32
  end
27
-
33
+
28
34
  opts.on("--server [PORT]", "Start web server (default port 4000)") do |port|
29
- options[:server] = true
30
- options[:server_port] = port || 4000
35
+ options['server'] = true
36
+ options['server_port'] = port unless port.nil?
31
37
  end
32
-
38
+
33
39
  opts.on("--lsi", "Use LSI for better related posts") do
34
- Jekyll.lsi = true
40
+ options['lsi'] = true
35
41
  end
36
-
42
+
37
43
  opts.on("--pygments", "Use pygments to highlight code") do
38
- Jekyll.pygments = true
44
+ options['pygments'] = true
39
45
  end
40
-
46
+
41
47
  opts.on("--rdiscount", "Use rdiscount gem for Markdown") do
42
- begin
43
- require 'rdiscount'
44
- Jekyll.markdown_proc = Proc.new { |x| RDiscount.new(x).to_html }
45
- puts 'Using rdiscount for Markdown'
46
- rescue LoadError
47
- puts 'You must have the rdiscount gem installed first'
48
- end
48
+ options['markdown'] = 'rdiscount'
49
49
  end
50
-
51
- opts.on("--permalink [TYPE]", "Use 'date' (default) for YYYY/MM/DD") do |style|
52
- Jekyll.permalink_style = (style || 'date').to_sym
50
+
51
+ opts.on("--permalink [TYPE]", "Use 'date' (default) for YYYY/MM/DD") do |style|
52
+ options['permalink'] = style unless style.nil?
53
53
  end
54
-
54
+
55
55
  opts.on("--version", "Display current version") do
56
56
  puts "Jekyll " + Jekyll.version
57
57
  exit 0
58
58
  end
59
59
  end
60
60
 
61
+ # Read command line options into `options` hash
61
62
  opts.parse!
62
63
 
63
- def clean(dest)
64
- FileUtils.rm_rf(dest)
65
- FileUtils.mkdir_p(dest)
64
+ # Get source and destintation from command line
65
+ case ARGV.size
66
+ when 0
67
+ when 1
68
+ options['destination'] = ARGV[0]
69
+ when 2
70
+ options['source'] = ARGV[0]
71
+ options['destination'] = ARGV[1]
72
+ else
73
+ puts "Invalid options. Run `jekyll --help` for assistance."
74
+ exit(1)
66
75
  end
67
76
 
77
+ options = Jekyll.configuration(options)
78
+
79
+ # Get source and destination directories (possibly set by config file)
80
+ source = options['source']
81
+ destination = options['destination']
82
+
83
+ # Files to watch
68
84
  def globs(source)
69
85
  Dir.chdir(source) do
70
86
  dirs = Dir['*'].select { |x| File.directory?(x) }
@@ -74,63 +90,51 @@ def globs(source)
74
90
  end
75
91
  end
76
92
 
77
- source = nil
78
- destination = nil
93
+ # Create the Site
94
+ site = Jekyll::Site.new(options)
79
95
 
80
- case ARGV.size
81
- when 0
82
- source = '.'
83
- destination = File.join('.', '_site')
84
- when 1
85
- source = '.'
86
- destination = ARGV[0]
87
- when 2
88
- source = ARGV[0]
89
- destination = ARGV[1]
90
- else
91
- puts "Invalid options. Run `jekyll --help` for assistance."
92
- exit(1)
93
- end
94
-
95
- if options[:auto]
96
+ # Run the directory watcher for auto-generation, if required
97
+ if options['auto']
96
98
  require 'directory_watcher'
97
99
 
98
100
  puts "Auto-regenerating enabled: #{source} -> #{destination}"
99
-
101
+
100
102
  dw = DirectoryWatcher.new(source)
101
103
  dw.interval = 1
102
104
  dw.glob = globs(source)
103
-
105
+
104
106
  dw.add_observer do |*args|
105
107
  t = Time.now.strftime("%Y-%m-%d %H:%M:%S")
106
108
  puts "[#{t}] regeneration: #{args.size} files changed"
107
- Jekyll.process(source, destination)
109
+ site.process
108
110
  end
109
-
111
+
110
112
  dw.start
111
-
112
- unless options[:server]
113
+
114
+ unless options['server']
113
115
  loop { sleep 1000 }
114
116
  end
115
117
  else
116
- Jekyll.process(source, destination)
117
- puts "Successfully generated site in #{destination}"
118
+ puts "Building site: #{source} -> #{destination}"
119
+ site.process
120
+ puts "Successfully generated site: #{source} -> #{destination}"
118
121
  end
119
122
 
120
- if options[:server]
123
+ # Run the server on the specified port, if required
124
+ if options['server']
121
125
  require 'webrick'
122
126
  include WEBrick
123
-
127
+
124
128
  FileUtils.mkdir_p(destination)
125
129
 
126
130
  s = HTTPServer.new(
127
- :Port => options[:server_port],
131
+ :Port => options['server_port'],
128
132
  :DocumentRoot => destination
129
133
  )
130
134
  t = Thread.new {
131
135
  s.start
132
136
  }
133
-
137
+
134
138
  trap("INT") { s.shutdown }
135
139
  t.join()
136
140
  end
data/lib/jekyll.rb CHANGED
@@ -13,22 +13,6 @@ require 'yaml'
13
13
  # 3rd party
14
14
  require 'liquid'
15
15
  require 'redcloth'
16
- begin
17
- require 'maruku'
18
- require 'maruku/ext/math'
19
- # Switch off MathML output
20
- MaRuKu::Globals[:html_math_output_mathml] = false
21
- MaRuKu::Globals[:html_math_engine] = 'none'
22
-
23
- # Turn on math to PNG support with blahtex
24
- # Resulting PNGs stored in `images/latex`
25
- MaRuKu::Globals[:html_math_output_png] = true
26
- MaRuKu::Globals[:html_png_engine] = 'blahtex'
27
- MaRuKu::Globals[:html_png_dir] = 'images/latex'
28
- MaRuKu::Globals[:html_png_url] = '/images/latex/'
29
- rescue LoadError
30
- puts "The maruku gem is required for markdown support!"
31
- end
32
16
 
33
17
  # internal requires
34
18
  require 'jekyll/core_ext'
@@ -45,23 +29,55 @@ require 'jekyll/tags/include'
45
29
  require 'jekyll/albino'
46
30
 
47
31
  module Jekyll
48
- class << self
49
- attr_accessor :source, :dest, :lsi, :pygments, :markdown_proc, :content_type, :permalink_style
50
- end
51
-
52
- Jekyll.lsi = false
53
- Jekyll.pygments = false
54
- Jekyll.markdown_proc = Proc.new { |x| Maruku.new(x).to_html }
55
- Jekyll.permalink_style = :date
56
-
57
- def self.process(source, dest)
58
- require 'classifier' if Jekyll.lsi
59
-
60
- Jekyll.source = source
61
- Jekyll.dest = dest
62
- Jekyll::Site.new(source, dest).process
32
+ # Default options. Overriden by values in _config.yaml or command-line opts.
33
+ # (Strings rather symbols used for compatability with YAML)
34
+ DEFAULTS = {
35
+ 'auto' => false,
36
+ 'server' => false,
37
+ 'server_port' => 4000,
38
+
39
+ 'source' => '.',
40
+ 'destination' => File.join('.', '_site'),
41
+
42
+ 'lsi' => false,
43
+ 'pygments' => false,
44
+ 'markdown' => 'maruku',
45
+ 'permalink' => 'date',
46
+
47
+ 'maruku' => {
48
+ 'use_tex' => false,
49
+ 'use_divs' => false,
50
+ 'png_engine' => 'blahtex',
51
+ 'png_dir' => 'images/latex',
52
+ 'png_url' => '/images/latex'
53
+ }
54
+ }
55
+
56
+ # Generate a Jekyll configuration Hash by merging the default options
57
+ # with anything in _config.yml, and adding the given options on top
58
+ # +override+ is a Hash of config directives
59
+ #
60
+ # Returns Hash
61
+ def self.configuration(override)
62
+ # _config.yml may override default source location, but until
63
+ # then, we need to know where to look for _config.yml
64
+ source = override['source'] || Jekyll::DEFAULTS['source']
65
+
66
+ # Get configuration from <source>/_config.yaml
67
+ config = {}
68
+ config_file = File.join(source, '_config.yml')
69
+ begin
70
+ config = YAML.load_file(config_file)
71
+ puts "Configuration from #{config_file}"
72
+ rescue => err
73
+ puts "WARNING: Could not read configuration. Using defaults (and options)."
74
+ puts "\t" + err
75
+ end
76
+
77
+ # Merge DEFAULTS < _config.yml < override
78
+ Jekyll::DEFAULTS.deep_merge(config).deep_merge(override)
63
79
  end
64
-
80
+
65
81
  def self.version
66
82
  yml = YAML.load(File.read(File.join(File.dirname(__FILE__), *%w[.. VERSION.yml])))
67
83
  "#{yml[:major]}.#{yml[:minor]}.#{yml[:patch]}"
data/lib/jekyll/albino.rb CHANGED
@@ -38,7 +38,7 @@
38
38
  #
39
39
  # To see all lexers and formatters available, run `pygmentize -L`.
40
40
  #
41
- # Chris Wanstrath // chris@ozmm.org
41
+ # Chris Wanstrath // chris@ozmm.org
42
42
  # GitHub // http://github.com
43
43
  #
44
44
  require 'open4'