diff --git a/bin/jekyll b/bin/jekyll index 28193a91..74cb99b0 100755 --- a/bin/jekyll +++ b/bin/jekyll @@ -106,7 +106,7 @@ opts = OptionParser.new do |opts| opts.on("--permalink [TYPE]", "Use 'date' (default) for YYYY/MM/DD") do |style| options['permalink'] = style unless style.nil? end - + opts.on("--paginate [POSTS_PER_PAGE]", "Paginate a blog's posts") do |per_page| begin options['paginate'] = per_page.to_i @@ -117,6 +117,16 @@ opts = OptionParser.new do |opts| end end + opts.on("--paginate_path [PAGINATED_URL_FORMAT]", "Leave blank for /page") do |paginate_path| + begin + options['paginate_path'] = paginate_path + raise ArgumentError if options['paginate_path'].nil? + rescue + puts 'You must specify a pagination url format' + exit 0 + end + end + opts.on("--limit_posts [MAX_POSTS]", "Limit the number of posts to publish") do |limit_posts| begin options['limit_posts'] = limit_posts.to_i @@ -152,12 +162,12 @@ if ARGV.size > 0 else migrator = migrator.downcase end - + cmd_options = [] ['file', 'dbname', 'user', 'pass', 'host', 'site'].each do |p| cmd_options << "\"#{options[p]}\"" unless options[p].nil? end - + # It's import time puts "Importing..." diff --git a/features/pagination.feature b/features/pagination.feature index 90b10578..cc3cf4d6 100644 --- a/features/pagination.feature +++ b/features/pagination.feature @@ -19,9 +19,36 @@ Feature: Site pagination And the "_site/page/index.html" file should exist And I should see "" in "_site/page/index.html" And the "_site/page/index.html" file should not exist - + Examples: | num | exist | posts | not_exist | | 1 | 4 | 1 | 5 | | 2 | 2 | 2 | 3 | | 3 | 2 | 1 | 3 | + + Scenario Outline: Setting a custom pagination path + Given I have a configuration file with: + | key | value | + | paginate | 1 | + | paginate_path | /blog/page-:num | + | permalink | /blog/:year/:month/:day/:title | + And I have a _layouts directory + And I have an "index.html" page that contains "{{ paginator.posts.size }}" + And I have a _posts directory + And I have the following post: + | title | date | layout | content | + | Wargames | 3/27/2009 | default | The only winning move is not to play. | + | Wargames2 | 4/27/2009 | default | The only winning move is not to play2. | + | Wargames3 | 5/27/2009 | default | The only winning move is not to play3. | + | Wargames4 | 6/27/2009 | default | The only winning move is not to play4. | + When I run jekyll + Then the _site/blog/page- directory should exist + And the "_site/blog/page-/index.html" file should exist + And I should see "" in "_site/blog/page-/index.html" + And the "_site/blog/page-/index.html" file should not exist + + Examples: + | exist | posts | not_exist | + | 2 | 1 | 5 | + | 3 | 1 | 6 | + | 4 | 1 | 7 | diff --git a/features/step_definitions/jekyll_steps.rb b/features/step_definitions/jekyll_steps.rb index 27239bd5..29abccec 100644 --- a/features/step_definitions/jekyll_steps.rb +++ b/features/step_definitions/jekyll_steps.rb @@ -121,7 +121,7 @@ When /^I change "(.*)" to contain "(.*)"$/ do |file, text| end Then /^the (.*) directory should exist$/ do |dir| - assert File.directory?(dir) + assert File.directory?(dir), "The directory \"#{dir}\" does not exist" end Then /^I should see "(.*)" in "(.*)"$/ do |text, file| diff --git a/lib/jekyll.rb b/lib/jekyll.rb index cc6502e9..fd455fb5 100644 --- a/lib/jekyll.rb +++ b/lib/jekyll.rb @@ -51,10 +51,10 @@ module Jekyll # Default options. Overriden by values in _config.yml or command-line opts. # (Strings rather symbols used for compatability with YAML). DEFAULTS = { - 'safe' => false, - 'auto' => false, - 'server' => false, - 'server_port' => 4000, + 'safe' => false, + 'auto' => false, + 'server' => false, + 'server_port' => 4000, 'source' => Dir.pwd, 'destination' => File.join(Dir.pwd, '_site'), @@ -66,6 +66,7 @@ module Jekyll 'markdown' => 'maruku', 'permalink' => 'date', 'include' => ['.htaccess'], + 'paginate_path' => 'page:num', 'markdown_ext' => 'markdown,mkd,mkdn,md', 'textile_ext' => 'textile', diff --git a/lib/jekyll/generators/pagination.rb b/lib/jekyll/generators/pagination.rb index 847de4f8..dee5ad54 100644 --- a/lib/jekyll/generators/pagination.rb +++ b/lib/jekyll/generators/pagination.rb @@ -37,13 +37,19 @@ module Jekyll if num_page > 1 newpage = Page.new(site, site.source, page.dir, page.name) newpage.pager = pager - newpage.dir = File.join(page.dir, "page#{num_page}") + newpage.dir = File.join(page.dir, paginate_path(site, num_page)) site.pages << newpage else page.pager = pager end end end + + private + def paginate_path(site, num_page) + format = site.config['paginate_path'] + format.sub(':num', num_page.to_s) + end end class Pager