octopress 3.0.0.alpha8 → 3.0.0.rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -1
  3. data/.travis.yml +5 -0
  4. data/README.md +130 -27
  5. data/lib/octopress.rb +8 -2
  6. data/lib/octopress/command.rb +3 -0
  7. data/lib/octopress/commands/build.rb +1 -4
  8. data/lib/octopress/commands/doctor.rb +3 -7
  9. data/lib/octopress/commands/helpers.rb +8 -3
  10. data/lib/octopress/commands/init.rb +15 -0
  11. data/lib/octopress/commands/new.rb +25 -22
  12. data/lib/octopress/commands/publish.rb +3 -1
  13. data/lib/octopress/commands/serve.rb +4 -7
  14. data/lib/octopress/configuration.rb +20 -12
  15. data/lib/octopress/draft.rb +39 -8
  16. data/lib/octopress/{core_ext.rb → ext/hash.rb} +0 -0
  17. data/lib/octopress/ext/titlecase.rb +37 -0
  18. data/lib/octopress/page.rb +49 -33
  19. data/lib/octopress/post.rb +17 -16
  20. data/lib/octopress/scaffold.rb +26 -0
  21. data/lib/octopress/version.rb +1 -1
  22. data/octopress.gemspec +1 -1
  23. data/scaffold/_octopress.yml +11 -0
  24. data/scaffold/_templates/page +6 -0
  25. data/scaffold/_templates/post +6 -0
  26. data/test/expected/_drafts/stupid-idea.markdown +6 -0
  27. data/test/expected/_layouts/page.html +1 -0
  28. data/test/expected/_layouts/post.html +1 -0
  29. data/test/expected/_octopress.yml +11 -0
  30. data/test/expected/_posts/2014-03-11-idea.markdown +6 -0
  31. data/test/expected/_posts/2014-03-12-awesome-stuff.markdown +6 -0
  32. data/test/expected/_posts/2014-03-13-awesome.markdown +6 -0
  33. data/test/expected/_site/2014/03/11/idea.html +1 -0
  34. data/test/expected/_site/2014/03/12/awesome-stuff.html +1 -0
  35. data/test/expected/_site/2014/03/13/awesome.html +1 -0
  36. data/test/expected/_site/awesome-page.html +1 -0
  37. data/test/expected/_site/cool-page.html +1 -0
  38. data/test/expected/_site/index.html +0 -0
  39. data/test/expected/_site/okay-page/index.html +1 -0
  40. data/test/expected/_templates/page +6 -0
  41. data/test/expected/_templates/post +6 -0
  42. data/test/expected/awesome-page.html +5 -0
  43. data/test/expected/cool-page.html +5 -0
  44. data/test/expected/index.html +0 -0
  45. data/test/expected/okay-page/index.html +5 -0
  46. data/test/test.rb +100 -0
  47. data/test/test_suite.rb +107 -0
  48. metadata +57 -10
  49. data/docs/_octopress.yml +0 -1
  50. data/docs/index.html +0 -1
  51. data/lib/octopress/commands/docs.rb +0 -74
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f9b1847085d24d5bdfcfc8c587c68d416bd9d95
4
- data.tar.gz: f4dde30b1c537623df72a4d3bca0f99f308292e0
3
+ metadata.gz: 787005c08bc0ed8ae3f2eefcf5b38ea90b372b20
4
+ data.tar.gz: 8824a64b418e2eb02a19bdef317ce9040a406628
5
5
  SHA512:
6
- metadata.gz: 439892300f2b23d9c19547ab05dbd409388db470f78069d2ae53339fea3079f1b0db1f3086a66adc304e4ed86dc45554d6f74b5987c58d5ac4966ec6c07a78e3
7
- data.tar.gz: 67f5ca769098c7f138dc24791a8b36c50dc837591095e772bb9fb4570997c03a797649b2f119be9a384b83eb599ba33bcb324b2d7f3ad7600058af418d53e49c
6
+ metadata.gz: ccec315c07272d23b79a08a48309e92aa8781f7dbca95f15c7985ded4c3e6794e08ff2eab110d32978856442d817c6ea235de5f1bb1d67874f390540668f0724
7
+ data.tar.gz: 9fb4b0328393f5880217ff015ae256149afdf0a9f8d666929d43fbb86abde7940b1603ab26b59f5930c0fb6f1cf518ccc307713a9929d022508df051d83c4cfe
data/.gitignore CHANGED
@@ -15,4 +15,6 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
- _site
18
+ .sass-cache
19
+ .code-highlighter-cache
20
+ test-site
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ - 1.9.3
5
+ script: cd test && bundle exec ruby test.rb
data/README.md CHANGED
@@ -17,53 +17,156 @@ Or install it yourself as:
17
17
 
18
18
  $ gem install octopress
19
19
 
20
- ## Usage
20
+ ## Basic Usage
21
21
 
22
- ### Generating a new site
22
+ Here are the commands for Octopress.
23
23
 
24
- To create a new scaffold of directories and files in a new directory named my_blog:
24
+ | Option | Description |
25
+ |:--------------------------------|:------------------------------------------|
26
+ | `octopress init <PATH>` | Adds Octopress scaffolding to your site |
27
+ | `octopress new post <TITLE>` | Add a new post to your site |
28
+ | `octopress new page <PATH>` | Add a new page to your site |
29
+ | `octopress new draft <TITLE>` | Add a new draft post to your site |
30
+ | `octopress publish <PATH>` | Publish a draft from _drafts to _posts |
31
+ | `octopress new <PATH>` | works just like `jekyll new` |
32
+ | `octopress build` | works just like `jekyll build` |
33
+ | `octopress serve` | works just like `jekyll serve` |
34
+ | `octopress doctor` | works just like `jekyll doctor` |
25
35
 
26
- ```bash
27
- $ octopress new my_blog
36
+ Run `octopress [command] --help` to learn more about any command and see its options.
37
+
38
+ ### Deployment
39
+
40
+ You can deploy your Octopress or Jeklly blog via git, rsync or Amazon S3. The deployment system ships with the [octopress-deploy][] gem which extends the Octopress CLI with the `deploy` command.
41
+
42
+ [octopress-deploy]: https://github.com/octopress/deploy
43
+
44
+ ## Configuration
45
+
46
+ Octopress reads its configurations from `_octopress.yml`. Here's what the configuration looks like by default.
47
+
48
+ ```yaml
49
+ # Default extension for new posts and pages
50
+ post_ext: markdown
51
+ page_ext: html
52
+
53
+ # Default templates for posts and pages
54
+ # Found in _templates/
55
+ post_layout: post
56
+ page_layout: page
57
+
58
+ # Format titles with titlecase?
59
+ titlecase: true
28
60
  ```
29
61
 
30
- ### Generating a new Post
62
+ ## Commands
63
+
64
+ ### Init
65
+
66
+
67
+ ```sh
68
+ octopress init <PATH> [options]
69
+ ```
70
+
71
+ This will copy Octopress's scaffolding into the specified directory. Use the `--force` option to overwrite existing files. The scaffolding is pretty simple:
72
+
73
+ ```
74
+ _octopress.yml
75
+ _templates/
76
+ post
77
+ page
78
+ ```
79
+
80
+ ### New Post
81
+
82
+ This automates the creation of a new post.
31
83
 
32
84
  ```bash
33
- $ octopress new post --title "My Title"
85
+ $ octopress new post "My Title"
86
+ ```
87
+
88
+ This will create a new file at `_posts/YYYY-MM-DD-my-title.markdown` with the following YAML front-matter already added.
89
+
90
+ ```
91
+ layout: post
92
+ title: "My Title"
93
+ date: YYYY-MM-DDTHH:MM:SS-00:00
34
94
  ```
35
95
 
36
96
  "Ok, great? What else can I do?" Great question! Check out these other options:
37
97
 
38
- | Option | Type | Description |
39
- |:-------------|:---------|:------------|
40
- | `title` | `String` | The title of the new post |
41
- | `date` | `String` | The date for the post. Should be parseable by [Time#parse](http://ruby-doc.org/stdlib-2.1.0/libdoc/time/rdoc/Time.html#method-i-parse) (defaults to Time.now) |
42
- | `slug` | `String` | The slug for the new post. |
43
- | `categories` | `Array` | A comma-separated list of categories to which this post belongs |
44
- | `tags` | `Array` | A comma-separated list of tags for this post |
98
+ | Option | Description |
99
+ |:---------------------|:----------------------------------------|
100
+ | `--template PATH` | Use a template from <path> |
101
+ | `--date DATE` | The date for the post. Should be parseable by [Time#parse](http://ruby-doc.org/stdlib-2.1.0/libdoc/time/rdoc/Time.html#method-i-parse) |
102
+ | `--slug SLUG` | Slug for the new post. |
103
+ | `--force` | Overwrite exsiting file. |
104
+
105
+ ### New Page
106
+
107
+ ```sh
108
+ $ octopress new page some-page # ./some-page.html
109
+ $ octopress new page docs/ # ./docs/index.html
110
+ $ octopress new page about.html # ./about.html
111
+ ```
45
112
 
46
- ### Generating a new Page
113
+ | Option | Description |
114
+ |:---------------------|:----------------------------------------|
115
+ | `--template PATH` | Use a template from <path> |
116
+ | `--title TITLE` | The title of the new page |
117
+ | `--date DATE` | The date for the page. Should be parseable by [Time#parse](http://ruby-doc.org/stdlib-2.1.0/libdoc/time/rdoc/Time.html#method-i-parse) |
118
+ | `--force` | Overwrite exsiting file. |
119
+
120
+ ### New Draft
47
121
 
48
122
  ```bash
49
- $ octopress new page --path about/index.markdown
123
+ $ octopress new draft "My Title"
50
124
  ```
51
125
 
52
- | Option | Type | Description |
53
- |:-------------|:---------|:------------|
54
- | `title` | `String` | The title of the new page |
55
- | `date` | `String` | The date for the page. Should be parseable by [Time#parse](http://ruby-doc.org/stdlib-2.1.0/libdoc/time/rdoc/Time.html#method-i-parse) |
56
- | `path` | `String` | The path at which the new page should be generated. |
126
+ This will create a new post in your `_drafts` directory.
57
127
 
58
- ### Other Commands
128
+ | Option | Description |
129
+ |:-------------------|:------------------------------------------|
130
+ | `--template PATH` | Use a template from <path> |
131
+ | `--date DATE` | The date for the draft. Should be parseable by [Time#parse](http://ruby-doc.org/stdlib-2.1.0/libdoc/time/rdoc/Time.html#method-i-parse) (defaults to Time.now) |
132
+ | `--slug SLUG` | The slug for the new post. |
133
+ | `--force` | Overwrite exsiting file. |
59
134
 
60
- Octopress also has the following commands, bundled as separate gems:
135
+ ### Publish draft
61
136
 
62
- | Command | Gem | Description |
63
- |:---------|:---------------------|:------------|
64
- | `deploy` | [octopress-deploy][] | Deployment for Octopress and Jekyll blogs. |
137
+ ```bash
138
+ $ octopress publish _drafts/some-post.md
139
+ ```
65
140
 
66
- [octopress-deploy]: https://github.com/octopress/deploy
141
+ This will move your draft to the `_posts` directory and rename the file with the proper date.
142
+
143
+ | Option | Description |
144
+ |:-------------------|:------------------------------------------|
145
+ | `--date DATE` | The date for the post. Should be parseable by [Time#parse](http://ruby-doc.org/stdlib-2.1.0/libdoc/time/rdoc/Time.html#method-i-parse) |
146
+ | `--slug SLUG` | Change the slug for the new post. |
147
+ | `--force` | Overwrite exsiting file. |
148
+ ```
149
+
150
+ When publishing a draft, the new post will use the draft's date. Pass the option `--date now` to the publish command to set the new post date from your system clock. As usual, you can pass any compatible date string as well.
151
+
152
+ ### Templates for Posts and pages
153
+
154
+ Octopress post and page templates look like this.
155
+
156
+ ```html
157
+ ---
158
+ layout: {{ layout }}
159
+ title: {{ title }}
160
+ date: {{ date }}
161
+ ---
162
+
163
+ ```
164
+
165
+ The YAML variables will be replaced with the correct content when you create a page or post. To modify this template create a `_templates/post` file and change it as you wish. You can add additional YAML front-matter or content, and you can even create multiple templates. Choose a custom template when creating a new post or page like this.
166
+
167
+ ```sh
168
+ octopress new post --template _templates/linkpost
169
+ ```
67
170
 
68
171
  ## Contributing
69
172
 
@@ -1,20 +1,22 @@
1
1
  require 'mercenary'
2
2
 
3
3
  module Octopress
4
- require 'octopress/core_ext'
4
+ require 'octopress/ext/hash'
5
+ require 'octopress/ext/titlecase'
5
6
  require 'octopress/configuration'
6
7
  require 'octopress/command'
7
8
  require 'octopress/version'
8
9
  require 'octopress/commands/new'
10
+ require 'octopress/commands/init'
9
11
  require 'octopress/commands/publish'
10
12
  require 'octopress/commands/build'
11
13
  require 'octopress/commands/serve'
12
14
  require 'octopress/commands/doctor'
13
- require 'octopress/commands/docs'
14
15
 
15
16
  autoload :Page, 'octopress/page'
16
17
  autoload :Post, 'octopress/post'
17
18
  autoload :Draft, 'octopress/draft'
19
+ autoload :Scaffold, 'octopress/scaffold'
18
20
 
19
21
  BLESSED_GEMS = %w[
20
22
  octopress-deploy
@@ -31,6 +33,10 @@ module Octopress
31
33
  @config ||= Configuration.config(options)
32
34
  end
33
35
 
36
+ def self.expand_gem_path(dir='')
37
+ File.expand_path(File.join(File.dirname(__FILE__), '../', dir))
38
+ end
39
+
34
40
  def self.require_blessed_gems
35
41
  BLESSED_GEMS.each do |gem|
36
42
  begin
@@ -1,3 +1,6 @@
1
+ require 'jekyll'
2
+ require File.expand_path('commands/helpers', File.dirname(__FILE__))
3
+
1
4
  module Octopress
2
5
  class Command
3
6
  def self.inherited(base)
@@ -1,11 +1,8 @@
1
- require 'jekyll'
2
- require File.expand_path('helpers', File.dirname(__FILE__))
3
-
4
1
  module Octopress
5
2
  class Build < Command
6
3
  def self.init_with_program(p)
7
4
  p.command(:build) do |c|
8
- c.syntax 'octopress build [options]'
5
+ c.syntax 'build [options]'
9
6
  c.description 'Build your site'
10
7
  CommandHelpers.add_build_options(c)
11
8
 
@@ -1,21 +1,17 @@
1
- require 'jekyll'
2
- require File.expand_path('helpers', File.dirname(__FILE__))
3
-
4
1
  module Octopress
5
2
  class Doctor < Command
6
3
  def self.init_with_program(p)
7
4
  p.command(:doctor) do |c|
8
5
  c.alias(:hyde)
9
6
 
10
- c.syntax 'octopress doctor'
7
+ c.syntax 'doctor'
11
8
  c.description 'Search site and print specific deprecation warnings'
12
-
13
- c.option 'config', '--config CONFIG_FILE[,CONFIG_FILE2,...]', Array, 'Custom configuration file'
9
+ CommandHelpers.add_common_options c
14
10
 
15
11
  c.action do |args, options|
16
12
  options = CommandHelpers.normalize_options(options)
17
13
  options = Jekyll.configuration(options.to_symbol_keys)
18
- ::Jekyll::Commands::Doctor.process(options)
14
+ Jekyll::Commands::Doctor.process(options)
19
15
  end
20
16
  end
21
17
  end
@@ -18,10 +18,15 @@ module Octopress
18
18
  options
19
19
  end
20
20
 
21
+ def self.add_page_options(c)
22
+ c.option 'template', '--template PATH', "New #{c.name.to_s} from a template."
23
+ c.option 'date', '--date DATE', "Use 'now' or a String that is parseable by Time#parse. (default: Time.now.iso8601)"
24
+ c.option 'force', '--force', 'Overwrite file if it already exists'
25
+ end
26
+
21
27
  def self.add_common_options(c)
22
- c.option 'template', '--template PATH', "New #{c.name.to_s} from a template. PATH is relative to _templates/"
23
- c.option 'date', '--date DATE', 'String that is parseable by Time#parse. (default: Time.now.iso8601)'
24
- c.option 'force', '--force', 'Force creation even if PATH already exists'
28
+ c.option 'config', '--config <CONFIG_FILE>[,CONFIG_FILE2,...]', Array, 'Custom Jekyll configuration file'
29
+ c.option 'octopress-config', '--octopress-config <CONFIG_FILE>', 'Custom Octopress configuration file'
25
30
  end
26
31
  end
27
32
  end
@@ -0,0 +1,15 @@
1
+ module Octopress
2
+ class Init < Command
3
+ def self.init_with_program(p)
4
+ p.command(:init) do |c|
5
+ c.syntax 'init <PATH> [options]'
6
+ c.description "Add Octopress's default scaffolding to your site."
7
+ c.option 'force', '--force', 'Overwrite files if they already exist.'
8
+
9
+ c.action do |args, options|
10
+ Scaffold.new(args, options).write
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -1,51 +1,54 @@
1
- require 'jekyll'
2
-
3
1
  module Octopress
4
2
  class New < Command
5
3
  def self.init_with_program(p)
6
4
  p.command(:new) do |c|
7
5
  c.syntax 'new <PATH>'
8
- c.description 'Creates a new Jekyll site scaffold in path'
9
- c.option 'force', '--force', 'Force creation even if path already exists'
10
- c.option 'blank', '--blank', 'Creates scaffolding but with empty files'
6
+ c.description 'Creates a new Jekyll site scaffold in path.'
7
+ c.option 'force', '--force', 'Force creation even if path already exists.'
8
+ c.option 'blank', '--blank', 'Creates scaffolding but with empty files.'
11
9
 
12
10
  c.action do |args, options|
13
11
  if args.empty?
14
12
  c.logger.error "You must specify a path."
15
13
  else
16
- ::Jekyll::Commands::New.process(args, options.to_symbol_keys)
14
+ Jekyll::Commands::New.process(args, options.to_symbol_keys)
17
15
  end
18
16
  end
19
17
 
20
- c.command(:page) do |page_command|
21
- page_command.syntax 'page <PATH> [options]'
22
- page_command.description 'Add a new page to your Jekyll site.'
23
- page_command.option 'title', '--title TITLE', 'String to be added as the title in the YAML front-matter.'
24
- CommandHelpers.add_common_options page_command
18
+ c.command(:page) do |c|
19
+ c.syntax 'page <PATH> [options]'
20
+ c.description 'Add a new page to your Jekyll site.'
21
+ c.option 'title', '--title TITLE', 'String to be added as the title in the YAML front-matter.'
22
+ CommandHelpers.add_page_options c
23
+ CommandHelpers.add_common_options c
25
24
 
26
- page_command.action do |args, options|
25
+ c.action do |args, options|
27
26
  options['path'] = args.first
28
27
  Page.new(options).write
29
28
  end
30
29
  end
31
30
 
32
- c.command(:post) do |post_command|
33
- post_command.syntax 'post <TITLE> [options]'
34
- post_command.description 'Add a new post to your Jekyll site.'
35
- CommandHelpers.add_common_options post_command
31
+ c.command(:post) do |c|
32
+ c.syntax 'post <TITLE> [options]'
33
+ c.description 'Add a new post to your Jekyll site.'
34
+ CommandHelpers.add_page_options c
35
+ c.option 'slug', '--slug SLUG', 'Use this slug in filename instead of sluggified post title.'
36
+ CommandHelpers.add_common_options c
36
37
 
37
- post_command.action do |args, options|
38
+ c.action do |args, options|
38
39
  options['title'] = args.first
39
40
  Post.new(options).write
40
41
  end
41
42
  end
42
43
 
43
- c.command(:draft) do |draft_command|
44
- draft_command.syntax 'draft <TITLE> [options]'
45
- draft_command.description 'Add a new draft post to your Jekyll site.'
46
- CommandHelpers.add_common_options draft_command
44
+ c.command(:draft) do |c|
45
+ c.syntax 'draft <TITLE> [options]'
46
+ c.description 'Add a new draft post to your Jekyll site.'
47
+ CommandHelpers.add_page_options c
48
+ c.option 'slug', '--slug SLUG', 'Use this slug in filename instead of sluggified post title.'
49
+ CommandHelpers.add_common_options c
47
50
 
48
- draft_command.action do |args, options|
51
+ c.action do |args, options|
49
52
  options['title'] = args.first
50
53
  Draft.new(options).write
51
54
  end
@@ -2,9 +2,11 @@ module Octopress
2
2
  class Publish < Command
3
3
  def self.init_with_program(p)
4
4
  p.command(:publish) do |c|
5
- c.syntax 'octopress publish PATH [options]'
5
+ c.syntax 'publish <PATH> [options]'
6
6
  c.description 'Convert a draft to a normal published post.'
7
7
  c.option 'date', '--date DATE', 'String that is parseable by Time#parse. (default: Time.now.iso8601)'
8
+ c.option 'force', '--force', 'Overwrite file if it already exists'
9
+ CommandHelpers.add_common_options c
8
10
 
9
11
  c.action do |args, options|
10
12
  abort "You must specify a path." if args.empty?
@@ -1,13 +1,10 @@
1
- require 'jekyll'
2
- require File.expand_path('helpers', File.dirname(__FILE__))
3
-
4
1
  module Octopress
5
2
  class Serve < Command
6
3
  def self.init_with_program(p)
7
4
  p.command(:serve) do |c|
8
5
  c.alias(:server)
9
6
 
10
- c.syntax 'jekyll serve [options]'
7
+ c.syntax 'serve [options]'
11
8
  c.description 'Serve your site locally'
12
9
 
13
10
  CommandHelpers.add_build_options(c)
@@ -22,9 +19,9 @@ module Octopress
22
19
 
23
20
  options.default :serving => true
24
21
  options = CommandHelpers.normalize_options(options)
25
- options = ::Jekyll.configuration(options.to_symbol_keys)
26
- ::Jekyll::Commands::Build.process(options)
27
- ::Jekyll::Commands::Serve.process(options)
22
+ options = Jekyll.configuration(options.to_symbol_keys)
23
+ Jekyll::Commands::Build.process(options)
24
+ Jekyll::Commands::Serve.process(options)
28
25
  end
29
26
  end
30
27
  end