Class: RubySlippers::Engine::Article
- Inherits:
-
Hash
- Object
- Hash
- RubySlippers::Engine::Article
show all
- Includes:
- Template
- Defined in:
- lib/ruby_slippers/article.rb
Instance Method Summary
collapse
Methods included from Template
included, #markdown, #method_missing
Constructor Details
#initialize(obj, config = {}) ⇒ Article
Returns a new instance of Article.
8
9
10
11
|
# File 'lib/ruby_slippers/article.rb', line 8
def initialize obj, config = {}
@obj, @config = obj, config
self.load if obj.is_a? Hash
end
|
Instance Method Details
30
31
32
33
|
# File 'lib/ruby_slippers/article.rb', line 30
def [] key
self.load unless self.tainted?
super
end
|
94
|
# File 'lib/ruby_slippers/article.rb', line 94
def author() self[:author] || @config[:author] end
|
54
55
56
|
# File 'lib/ruby_slippers/article.rb', line 54
def body
markdown self[:body].sub(@config[:summary][:delim], '') rescue markdown self[:body]
end
|
93
|
# File 'lib/ruby_slippers/article.rb', line 93
def date() @config[:date].call(self[:date]) end
|
#full_image_path ⇒ Object
83
84
85
86
|
# File 'lib/ruby_slippers/article.rb', line 83
def full_image_path
return nil unless self[:image]
self[:date].strftime("/img/articles/%Y/%B/#{self[:image]}").downcase
end
|
#has_more_then_summary? ⇒ Boolean
88
89
90
|
# File 'lib/ruby_slippers/article.rb', line 88
def has_more_then_summary?
self[:body].length > self.summary.length
end
|
#image_src ⇒ Object
95
|
# File 'lib/ruby_slippers/article.rb', line 95
def image_src() full_image_path end
|
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/ruby_slippers/article.rb', line 13
def load
data = if @obj.is_a? String
meta, self[:body] = File.read(@obj).split(/\n\n/, 2)
@obj =~ /\/(\d{4}-\d{2}-\d{2})[^\/]*$/
($1 ? {:date => $1} : {}).merge(YAML.load(meta))
elsif @obj.is_a? Hash
@obj
end.inject({}) {|h, (k,v)| h.merge(k.to_sym => v) }
self.taint
self.update data
self[:date] = Date.parse(self[:date].gsub('/', '-')) rescue Date.today
self
end
|
58
59
60
|
# File 'lib/ruby_slippers/article.rb', line 58
def path
"/#{@config[:prefix]}#{self[:date].strftime("/%Y/%m/%d/#{slug}/")}".squeeze('/')
end
|
#related_articles ⇒ Object
76
77
78
79
80
81
|
# File 'lib/ruby_slippers/article.rb', line 76
def related_articles
Site.send(:articles, :txt).each do |article|
raise article.to_yaml
Article.new article, @config
end
end
|
35
36
37
|
# File 'lib/ruby_slippers/article.rb', line 35
def slug
self[:slug] || self[:title].slugize
end
|
#summary(length = nil) ⇒ Object
39
40
41
42
43
44
45
46
47
|
# File 'lib/ruby_slippers/article.rb', line 39
def summary length = nil
config = @config[:summary]
sum = if self[:body] =~ config[:delim]
self[:body].split(config[:delim]).first
else
self[:body].match(/(.{1,#{length || config[:length] || config[:max]}}.*?)(\n|\Z)/m).to_s
end
markdown(sum.length >= self[:body].length-1 ? sum : sum.strip.sub(/\.\Z/, '…'))
end
|
#tag_links ⇒ Object
69
70
71
72
73
74
|
# File 'lib/ruby_slippers/article.rb', line 69
def tag_links
return '' unless self[:tags]
self[:tags].split(',').collect do |tag|
"<a href=\"/tagged/#{tag.strip.slugize}\">#{tag.strip.humanize.downcase}</a>"
end.join(@config[:tag_separator])
end
|
62
63
64
65
66
67
|
# File 'lib/ruby_slippers/article.rb', line 62
def tags
return [] unless self[:tags]
self[:tags].split(',').collect do |tag|
"#{tag.strip.humanize.downcase}"
end.join(@config[:tag_separator])
end
|
92
|
# File 'lib/ruby_slippers/article.rb', line 92
def title() self[:title] || "an article" end
|
#to_html ⇒ Object
Also known as:
to_s
96
|
# File 'lib/ruby_slippers/article.rb', line 96
def to_html() self.load; super(:article, @config) end
|
#url ⇒ Object
Also known as:
permalink
49
50
51
|
# File 'lib/ruby_slippers/article.rb', line 49
def url
"http://#{(@config[:url].sub("http://", '') + self.path).squeeze('/')}"
end
|