diff options
| author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2019-06-28 19:12:42 +0200 | 
|---|---|---|
| committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2019-06-28 19:13:20 +0200 | 
| commit | a3b86375c946299c9216412e10c5bcf5234c7fcd (patch) | |
| tree | b1cceccafa1fad92561bfda729e2ab9b7b62f1fc /lib | |
Initial commit
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/blog.rb | 33 | ||||
| -rw-r--r-- | lib/pather.rb | 38 | ||||
| -rw-r--r-- | lib/statics.rb | 7 | ||||
| -rw-r--r-- | lib/templated.rb | 24 | 
4 files changed, 102 insertions, 0 deletions
| diff --git a/lib/blog.rb b/lib/blog.rb new file mode 100644 index 0000000..e4403a3 --- /dev/null +++ b/lib/blog.rb @@ -0,0 +1,33 @@ +require 'date' + +def parse_post filename +  file_raw = File.read(src filename).force_encoding('UTF-8').split('---') +  post = YAML.load file_raw[0] +  post['content'] = file_raw[1].strip +  post['filename'] = filename +  post +end + +def generate_blog_post post +  ERB.new(File.read(src 'post-template.html.erb')).result binding +end + +def posts +  Dir.new(src 'blog').children.map do |filename| +    post = parse_post "blog/#{filename}" +  end.sort do |a, b| +    Date.parse(b['date']) <=> Date.parse(a['date']) +  end +end + +def write_blog_files +  posts.each do |post| +    content = ERB.new(File.read(src 'post-template.html.erb')).result binding +    write_templated content, post['filename'], head_title: post['title'], h1_title: 'Blog.' +  end +end + +def write_blog_archive +  content = ERB.new(File.read(src 'blog.html.erb')).result +  write_templated content, 'blog.html', title: 'Blog.' +end diff --git a/lib/pather.rb b/lib/pather.rb new file mode 100644 index 0000000..5ce7d02 --- /dev/null +++ b/lib/pather.rb @@ -0,0 +1,38 @@ +class Pather +  def initialize +    @assets = {} +    @current_path = [] +  end + +  def add asset_id, path +    @assets[asset_id] = @current_path + path.split('/') +  end + +  def path_to asset_id +    other_path = @assets[asset_id] +    find_path_between @current_path, other_path +  end + +  def find_path_between from, to +    from, to = drop_common_prefix from, to +    path = ('../' * from.length) + to.join('/') +  end + +  def drop_common_prefix path1, path2 +    common_prefix_length = path1.zip(path2).take_while do |(segment1, segment2)| +      segment1 == segment2 +    end.length + +    return path1[common_prefix_length..], path2[common_prefix_length..] +  end + +  def cd path +    path.split('/').each do |segment| +      if segment == '..' +        @current_path.pop +      else +        @current_path.push segment +      end +    end +  end +end diff --git a/lib/statics.rb b/lib/statics.rb new file mode 100644 index 0000000..3865439 --- /dev/null +++ b/lib/statics.rb @@ -0,0 +1,7 @@ +def write_statics statics +  statics = statics.map do | filename | +    src filename +  end + +  FileUtils.cp statics, BuildDir +end diff --git a/lib/templated.rb b/lib/templated.rb new file mode 100644 index 0000000..a7e0d63 --- /dev/null +++ b/lib/templated.rb @@ -0,0 +1,24 @@ +def template +  ERB.new(File.read(src 'template.html.erb')) +end + +def write_templated_file content_filename, options +  content = File.read(src content_filename) +  write_templated content, content_filename, options +end + +def write_templated_erb erb_filename, options +  content = ERB.new(File.read(src erb_filename)).result +  cut_filename = erb_filename.sub /\.erb$/, '' +  write_templated content, cut_filename, options +end + +# Options should include +# head_title: used for <title> tag +# h1_title: used for <h1> on top of page +# title: used for both of the above, can be overridden with either +def write_templated content, filename, options +  head_title = options[:head_title] || options[:title] || '' +  h1_title = options[:h1_title] || options[:title] || '' +  File.write build(filename), template.result(binding) +end |