Filter out any files/directories that are hidden or backup files (start with "." or "#" or end with "~"), or contain site content (start with "_"), or are excluded in the site configuration, unless they are web server files such as '.htaccess'.
Initialize the site
config is a Hash containing site configurations details
Returns
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/jekyll/site.rb', line 13definitialize(config)self.config=config.cloneself.safe=config['safe']self.source=File.expand_path(config['source'])self.dest=File.expand_path(config['destination'])self.plugins=File.expand_path(config['plugins'])self.lsi=config['lsi']self.pygments=config['pygments']self.permalink_style=config['permalink'].to_symself.exclude=config['exclude']||[]self.future=config['future']self.resetself.setupend
Instance Attribute Details
#categories ⇒ Object
Returns the value of attribute categories.
4
5
6
# File 'lib/jekyll/site.rb', line 4defcategories@categoriesend
#config ⇒ Object
Returns the value of attribute config.
4
5
6
# File 'lib/jekyll/site.rb', line 4defconfig@configend
#converters ⇒ Object
Returns the value of attribute converters.
7
8
9
# File 'lib/jekyll/site.rb', line 7defconverters@convertersend
#dest ⇒ Object
Returns the value of attribute dest.
4
5
6
# File 'lib/jekyll/site.rb', line 4defdest@destend
#exclude ⇒ Object
Returns the value of attribute exclude.
4
5
6
# File 'lib/jekyll/site.rb', line 4defexclude@excludeend
#future ⇒ Object
Returns the value of attribute future.
4
5
6
# File 'lib/jekyll/site.rb', line 4deffuture@futureend
#generators ⇒ Object
Returns the value of attribute generators.
7
8
9
# File 'lib/jekyll/site.rb', line 7defgenerators@generatorsend
#layouts ⇒ Object
Returns the value of attribute layouts.
4
5
6
# File 'lib/jekyll/site.rb', line 4deflayouts@layoutsend
#lsi ⇒ Object
Returns the value of attribute lsi.
4
5
6
# File 'lib/jekyll/site.rb', line 4deflsi@lsiend
#pages ⇒ Object
Returns the value of attribute pages.
4
5
6
# File 'lib/jekyll/site.rb', line 4defpages@pagesend
#permalink_style ⇒ Object
Returns the value of attribute permalink_style.
4
5
6
# File 'lib/jekyll/site.rb', line 4defpermalink_style@permalink_styleend
#plugins ⇒ Object
Returns the value of attribute plugins.
4
5
6
# File 'lib/jekyll/site.rb', line 4defplugins@pluginsend
#posts ⇒ Object
Returns the value of attribute posts.
4
5
6
# File 'lib/jekyll/site.rb', line 4defposts@postsend
#pygments ⇒ Object
Returns the value of attribute pygments.
4
5
6
# File 'lib/jekyll/site.rb', line 4defpygments@pygmentsend
#safe ⇒ Object
Returns the value of attribute safe.
4
5
6
# File 'lib/jekyll/site.rb', line 4defsafe@safeend
#source ⇒ Object
Returns the value of attribute source.
4
5
6
# File 'lib/jekyll/site.rb', line 4defsource@sourceend
#static_files ⇒ Object
Returns the value of attribute static_files.
4
5
6
# File 'lib/jekyll/site.rb', line 4defstatic_files@static_filesend
#tags ⇒ Object
Returns the value of attribute tags.
4
5
6
# File 'lib/jekyll/site.rb', line 4deftags@tagsend
#time ⇒ Object
Returns the value of attribute time.
4
5
6
# File 'lib/jekyll/site.rb', line 4deftime@timeend
Instance Method Details
#filter_entries(entries) ⇒ Object
Filter out any files/directories that are hidden or backup files (start
with "." or "#" or end with "~"), or contain site content (start with "_"),
or are excluded in the site configuration, unless they are web server
files such as '.htaccess'
222
223
224
225
226
227
228
# File 'lib/jekyll/site.rb', line 222deffilter_entries(entries)entries=entries.rejectdo|e|unless['.htaccess'].include?(e)['.','_','#'].include?(e[0..0])||e[-1..-1]=='~'||self.exclude.include?(e)endendend
#generate ⇒ Object
123
124
125
126
127
# File 'lib/jekyll/site.rb', line 123defgenerateself.generators.eachdo|generator|generator.generate(self)endend
#post_attr_hash(post_attr) ⇒ Object
Constructs a hash map of Posts indexed by the specified Post attribute
Returns => []
193
194
195
196
197
198
199
200
# File 'lib/jekyll/site.rb', line 193defpost_attr_hash(post_attr)# Build a hash map based on the specified post attribute ( post attr => array of posts )# then sort each array in reverse orderhash=Hash.new{|hash,key|hash[key]=Array.new}self.posts.each{|p|p.send(post_attr.to_sym).each{|t|hash[t]<<p}}hash.values.map{|sortme|sortme.sort!{|a,b|b<=>a}}returnhashend
#process ⇒ Object
Do the actual work of processing the site and generating the
real deal. 5 phases; reset, read, generate, render, write. This allows
rendering to have full site payload available.
Returns nothing
69
70
71
72
73
74
75
# File 'lib/jekyll/site.rb', line 69defprocessself.resetself.readself.generateself.renderself.writeend
#read ⇒ Object
77
78
79
80
# File 'lib/jekyll/site.rb', line 77defreadself.read_layouts# existing implementation did this at top level only so preserved thatself.read_directoriesend
#read_directories(dir = '') ⇒ Object
Reads the directories and finds posts, pages and static files that will
become part of the valid site according to the rules in filter_entries.
The dir String is a relative path used to call this method
recursively as it descends through directories
# File 'lib/jekyll/site.rb', line 165defread_directories(dir='')base=File.join(self.source,dir)entries=filter_entries(Dir.entries(base))self.read_posts(dir)entries.eachdo|f|f_abs=File.join(base,f)f_rel=File.join(dir,f)ifFile.directory?(f_abs)nextifself.dest.sub(/\/$/,'')==f_absread_directories(f_rel)elsif!File.symlink?(f_abs)first3=File.open(f_abs){|fd|fd.read(3)}iffirst3=="---"# file appears to have a YAML header so process it as a pagepages<<Page.new(self,self.source,dir,f)else# otherwise treat it as a static filestatic_files<<StaticFile.new(self,self.source,dir,f)endendendend
#read_layouts(dir = '') ⇒ Object
Read all the files in //_layouts and create a new Layout
object with each one.
Returns nothing
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/jekyll/site.rb', line 86defread_layouts(dir='')base=File.join(self.source,dir,"_layouts")returnunlessFile.exists?(base)entries=[]Dir.chdir(base){entries=filter_entries(Dir['*.*'])}entries.eachdo|f|name=f.split(".")[0..-2].join(".")self.layouts[name]=Layout.new(self,base,f)endend
#read_posts(dir) ⇒ Object
Read all the files in //_posts and create a new Post
object with each one.
# File 'lib/jekyll/site.rb', line 102defread_posts(dir)base=File.join(self.source,dir,'_posts')returnunlessFile.exists?(base)entries=Dir.chdir(base){filter_entries(Dir['**/*'])}# first pass processes, but does not yet render post contententries.eachdo|f|ifPost.valid?(f)post=Post.new(self,self.source,dir,f)ifpost.published&&(self.future||post.date<=self.time)self.posts<<postpost.categories.each{|c|self.categories[c]<<post}post.tags.each{|c|self.tags[c]<<post}endendendself.posts.sort!end
# File 'lib/jekyll/site.rb', line 129defrenderself.posts.eachdo|post|post.render(self.layouts,site_payload)endself.pages.eachdo|page|page.render(self.layouts,site_payload)endself.categories.values.map{|ps|ps.sort!{|a,b|b<=>a}}self.tags.values.map{|ps|ps.sort!{|a,b|b<=>a}}rescueErrno::ENOENT=>e# ignore missing layout dirend
#reset ⇒ Object
30
31
32
33
34
35
36
37
38
# File 'lib/jekyll/site.rb', line 30defresetself.time=Time.parse(self.config['time'].to_s)||Time.nowself.layouts={}self.posts=[]self.pages=[]self.static_files=[]self.categories=Hash.new{|hash,key|hash[key]=[]}self.tags=Hash.new{|hash,key|hash[key]=[]}end
# File 'lib/jekyll/site.rb', line 40defsetuprequire'classifier'ifself.lsi# If safe mode is off, load in any ruby files under the plugins# directory.unlessself.safeDir[File.join(self.plugins,"**/*.rb")].eachdo|f|requirefendendself.converters=Jekyll::Converter.subclasses.selectdo|c|!self.safe||c.safeend.mapdo|c|c.new(self.config)endself.generators=Jekyll::Generator.subclasses.selectdo|c|!self.safe||c.safeend.mapdo|c|c.new(self.config)endend
#site_payload ⇒ Object
The Hash payload containing site-wide data
Returns => {"time" =>
208
209
210
211
212
213
214
215
216
# File 'lib/jekyll/site.rb', line 208defsite_payload{"site"=>self.config.merge({"time"=>self.time,"posts"=>self.posts.sort{|a,b|b<=>a},"pages"=>self.pages,"html_pages"=>self.pages.reject{|page|!page.html?},"categories"=>post_attr_hash('categories'),"tags"=>post_attr_hash('tags')})}end
#write ⇒ Object
Write static files, pages and posts
Returns nothing
147
148
149
150
151
152
153
154
155
156
157
# File 'lib/jekyll/site.rb', line 147defwriteself.posts.eachdo|post|post.write(self.dest)endself.pages.eachdo|page|page.write(self.dest)endself.static_files.eachdo|sf|sf.write(self.dest)endend