lib/henshin/post.rb in henshin-0.1.2 vs lib/henshin/post.rb in henshin-0.1.3
- old
+ new
@@ -28,36 +28,49 @@
parser = {'title' => '([a-zA-Z0-9 ]+)',
'title-with-dashes' => '([a-zA-Z0-9-]+)',
'date' => '(\d{4}-\d{2}-\d{2})',
'date-time' => '(\d{4}-\d{2}-\d{2} at \d{2}:\d{2})',
'xml-date-time' => '(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(:\d{2})?((\+|-)\d{2}:\d{2})?)',
+ 'category' => '([a-zA-Z0-9_ -]+)',
'extension' => "(#{ site.config[:extensions].join('|') })"}
file_parser = config[:file_name]
- # create string regex and keep order of info
data_order = []
+
+ # put together regex
m = file_parser.gsub(/\{([a-z-]+)\}/) do
data_order << $1
parser[$1]
end
+
+ # replace optional '<stuff>'
+ m.gsub!(/<(.+)>/) do
+ # this may lead to problems, well I say may...
+ data_order.unshift( 'optional' )
+ "(#{$1})?"
+ end
+
# convert string to actual regex
matcher = Regexp.new(m)
override = {}
- # extract data from filename
- file_data = path.file_name.match( matcher ).captures
- file_data.each_with_index do |data, i|
+ name = path[ (config[:root]+'/posts/').size..-1 ]
+
+ file_data = name.match( matcher ).captures
+ file_data.each_with_index do |data, i|
if data_order[i].include? 'title'
if data_order[i].include? 'dashes'
override[:title] = data.gsub(/-/, ' ').titlize
else
override[:title] = data.titlize
end
elsif data_order[i].include? 'date'
override[:date] = data
elsif data_order[i].include? 'extension'
override[:extension] = data
+ elsif data_order[i].include? 'category'
+ override[:category] = data
end
end
self.override( override )
end
@@ -133,10 +146,11 @@
# Creates the permalink for the post
def permalink
partials = {'year' => self.date.year,
'month' => self.date.month,
'date' => self.date.day,
- 'title' => self.title.slugify}
+ 'title' => self.title.slugify,
+ 'category' => self.category || ''}
config[:permalink].gsub(/\{([a-z-]+)\}/) do
partials[$1]
end
end
\ No newline at end of file