lib/blogue.rb in blogue-0.1.0 vs lib/blogue.rb in blogue-0.2.0
- old
+ new
@@ -1,62 +1,62 @@
require 'blogue/engine'
+require 'blogue/kramdown_template_handler'
require 'digest'
module Blogue
- mattr_accessor :author_name
- mattr_accessor :assets_path
-
- mattr_accessor :posts_path
- self.posts_path = 'app/posts'
-
- mattr_accessor :checksum_calc
- self.checksum_calc = -> post do
+ DEFAULT_AUTHOR_NAME = `whoami`.strip.freeze
+ DEFAULT_POSTS_PATH = 'app/posts'.freeze
+ DEFAULT_ASSETS_PATH = -> { "#{Blogue.posts_path}/assets" }
+ DEFAULT_COMPUTE_POST_CACHE_KEY = -> post {
Digest::MD5.hexdigest([post.id, post.author_name, post.body].join)
- end
+ }
+ DEFAULT_ROUGE_KRAMDOWN_OPTIONS = {
+ :syntax_highlighter => :rouge,
+ :syntax_highlighter_opts => { default_lang: 'ruby' }.freeze
+ }.freeze
- mattr_accessor :blanket_checksum_calc
- self.blanket_checksum_calc = -> do
- Digest::MD5.hexdigest(checksums.values.sort.join)
- end
+ class << self
+ attr_accessor \
+ :author_name,
+ :posts_path,
+ :compute_post_cache_key,
+ :assets_path
- mattr_accessor :default_markdown_format_handler
- self.default_markdown_format_handler = -> template {
- mdown = ActionView::Template.registered_template_handler(:erb).(template)
- "Kramdown::Document.new(begin;#{mdown};end).to_blogue"
- }
+ attr_reader \
+ :posts_cache_keys,
+ :cache_key,
+ :started_at,
+ :markdown_template_handler
- mattr_accessor :default_kramdown_codeblock_handler
- self.default_kramdown_codeblock_handler = -> el, indent {
- attr = el.attr.dup
- lang = extract_code_language!(attr)
+ def setup_defaults!
+ self.author_name = DEFAULT_AUTHOR_NAME
+ self.posts_path = DEFAULT_POSTS_PATH
+ self.assets_path = DEFAULT_ASSETS_PATH
+ self.compute_post_cache_key = DEFAULT_COMPUTE_POST_CACHE_KEY
- begin
- Rouge.highlight(el.value, lang || 'text', 'html')
- rescue RuntimeError
- Rouge.highlight(el.value, 'text', 'html')
+ @markdown_template_handler = detect_markdown_template_handler
+ @started_at = Time.current.freeze
end
- }
- mattr_accessor :markdown_format_handler
- def self.setup_kramdown_for_handling_md_files
- require 'kramdown/converter/blogue'
- self.markdown_format_handler ||= default_markdown_format_handler
- ActionView::Template.register_template_handler :md, markdown_format_handler
- end
+ def compute_cache_keys!
+ @posts_cache_keys = Hash[Post.all.map { |p|
+ [p.id.freeze, Blogue.compute_post_cache_key.(p).freeze]
+ }].freeze
- mattr_accessor :kramdown_codeblock_handler
- def self.use_rouge_codeblock_handler
- self.kramdown_codeblock_handler ||= default_kramdown_codeblock_handler
- end
+ @cache_key = Digest::MD5.hexdigest(
+ @posts_cache_keys.values.sort.join
+ ).freeze
+ end
- mattr_accessor :checksums
- def self.set_checksums
- self.checksums = Hash[
- Post.all.map{ |p| [p.id, checksum_calc.(p)] }
- ]
- end
+ def markdown_template_preprocessor=(preprocessor)
+ self.markdown_template_handler.preprocessor = preprocessor
+ end
- mattr_accessor :blanket_checksum
- def self.set_blanket_checksum
- self.blanket_checksum = blanket_checksum_calc.()
+ def detect_markdown_template_handler
+ if defined?(Kramdown) && defined?(Rouge)
+ KramdownTemplateHandler.new(DEFAULT_ROUGE_KRAMDOWN_OPTIONS)
+ elsif defined?(Kramdown)
+ KramdownTemplateHandler.new
+ end
+ end
end
end