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