lib/retter/entries.rb in retter-0.2.0 vs lib/retter/entries.rb in retter-0.2.1
- old
+ new
@@ -1,21 +1,29 @@
# coding: utf-8
-require 'active_support/core_ext/object'
+require 'active_support/cache'
require 'digest/sha1'
require 'redcarpet'
+require 'chronic'
module Retter
class EntryLoadError < RetterError; end
class Entries < Array
- include Retter::Stationery
+ include Stationery
+ extend Configurable
+ configurable :renderer, :retters_dir, :wip_file
+
def initialize
- load_entries config.retters_dir
+ load_entries retters_dir
end
+ def retter_file(date)
+ retters_dir.join(date ? date.strftime('%Y%m%d.md') : 'today.md')
+ end
+
def detect_by_string(str)
entry =
case str
when nil, ''
detect_by_today || wip_entry
@@ -34,14 +42,14 @@
entry
end
def detect_by_filename(filename)
case filename
- when config.wip_file.basename.to_s
+ when wip_file.basename.to_path
wip_entry
else
- detect {|e| e.pathname.basename.to_s == filename }
+ detect {|e| e.pathname.basename.to_path == filename }
end
end
def detect_by_today
detect_by_date(Date.today)
@@ -50,47 +58,41 @@
def detect_by_date(date)
detect {|e| e.date == date }
end
def parse_date_string(date_str)
- case date_str
- when /^yesterday$/i then 1.day.ago
- when /^today$/i then 0.day.ago
- when /^tomorrow$/i then 1.day.since
- when /^[0-9]+[\.\s](?:days?|weeks?|months?|years?)[\.\s](?:ago|since)$/i
- eval(date_str.gsub(/\s+/, '.')).to_date
- else
- Date.parse(date_str)
- end
+ normalized = date_str.gsub(/\./, ' ')
+
+ (Chronic.parse(normalized) || Date.parse(normalized)).to_date
end
def wip_entry(date = nil)
- wip_file = config.retter_file(date)
- wip_date = date || Date.today
- wip_body = wip_file.exist? ? wip_file.read : ''
+ file = retter_file(date)
+ date = date || Date.today
+ body = file.exist? ? file.read : ''
- Retter::Entry.new date: wip_date, body: rendered_body(wip_body), pathname: wip_file
+ Entry.new date: date, body: rendered_body(body), pathname: file
end
def commit_wip_entry!
- if config.wip_file.exist?
- copy = config.wip_file.read
- config.retter_file(Date.today).open('a') {|f| f.puts copy }
- config.wip_file.unlink
+ if wip_file.exist?
+ copy = wip_file.read
+ retter_file(Date.today).open('a') {|f| f.puts copy }
+ wip_file.unlink
end
- Retter.reset_entries!
+ Retter.reset!
end
def load_entries(path)
date_files = find_markup_files(path).map {|file|
- date_str = file.basename('.*').to_s
+ date_str = file.basename('.*').to_path
[Date.parse(date_str), file]
}.sort_by(&:first)
date_files.reverse_each {|date, file|
- self << Retter::Entry.new(date: date, body: rendered_body(file.read))
+ self << Entry.new(date: date, body: rendered_body(file.read))
}
end
def find_markup_files(path)
path = Pathname.new(path).realpath
@@ -100,10 +102,10 @@
def rendered_body(body)
key = Digest::SHA1.hexdigest('entry_' + body)
config.cache.fetch(key) do
Redcarpet::Markdown.new(
- config.renderer,
+ renderer,
autolink: true,
space_after_headers: true,
fenced_code_blocks: true,
strikethrough: true,
superscript: true,