jekyll-compose 0.2.1 → 0.3.0
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.
- checksums.yaml +4 -4
- data/lib/jekyll-compose.rb +7 -1
- data/lib/jekyll-compose/arg_parser.rb +27 -0
- data/lib/jekyll-compose/file_creator.rb +36 -0
- data/lib/jekyll-compose/file_info.rb +20 -0
- data/lib/jekyll-compose/file_mover.rb +34 -0
- data/lib/jekyll-compose/movement_arg_parser.rb +19 -0
- data/lib/jekyll-compose/version.rb +1 -1
- data/lib/jekyll/commands/draft.rb +21 -31
- data/lib/jekyll/commands/page.rb +48 -0
- data/lib/jekyll/commands/post.rb +34 -31
- data/lib/jekyll/commands/publish.rb +35 -14
- data/lib/jekyll/commands/unpublish.rb +58 -0
- metadata +10 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d24fea17086602339c5733e9f7ff462f7873d688
|
4
|
+
data.tar.gz: 760ec8a158fc02edc26483568b38e55bce6fda0e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0c1164e65ae1eb4838a9acbe8cf03f95a95e754f28c7f8f088b8d8d5d449992f257e2bc881f32a30e6cd262ddbf37559ec310e16622f5e36854fce020388a94
|
7
|
+
data.tar.gz: 0da8db0f0c55356953d8446abd27aa4f2aa1c47eefd4a3fa61ca2857f1b52fdaac5ea8068d6f24b079958ef6362cc394dcce623c25b285dbc4fba7749ececdb1
|
data/lib/jekyll-compose.rb
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
require "jekyll-compose/version"
|
2
|
+
require "jekyll-compose/arg_parser"
|
3
|
+
require "jekyll-compose/movement_arg_parser"
|
4
|
+
require "jekyll-compose/file_creator"
|
5
|
+
require "jekyll-compose/file_mover"
|
6
|
+
require "jekyll-compose/file_info"
|
2
7
|
|
3
8
|
module Jekyll
|
4
9
|
module Compose
|
5
10
|
DEFAULT_TYPE = "md"
|
6
11
|
DEFAULT_LAYOUT = "post"
|
12
|
+
DEFAULT_LAYOUT_PAGE = "page"
|
7
13
|
end
|
8
14
|
end
|
9
15
|
|
10
|
-
%w{draft post publish}.each do |file|
|
16
|
+
%w{draft post publish unpublish page}.each do |file|
|
11
17
|
require File.expand_path("jekyll/commands/#{file}.rb", File.dirname(__FILE__))
|
12
18
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Jekyll::Compose::ArgParser
|
2
|
+
attr_reader :args, :options
|
3
|
+
def initialize(args, options)
|
4
|
+
@args = args
|
5
|
+
@options = options
|
6
|
+
end
|
7
|
+
|
8
|
+
def validate!
|
9
|
+
raise ArgumentError.new('You must specify a name.') if args.empty?
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
type = options["extension"] || Jekyll::Compose::DEFAULT_TYPE
|
14
|
+
end
|
15
|
+
|
16
|
+
def layout
|
17
|
+
layout = options["layout"] || Jekyll::Compose::DEFAULT_LAYOUT
|
18
|
+
end
|
19
|
+
|
20
|
+
def title
|
21
|
+
args.join ' '
|
22
|
+
end
|
23
|
+
|
24
|
+
def force?
|
25
|
+
!!options["force"]
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Compose
|
3
|
+
class FileCreator
|
4
|
+
attr_reader :file, :force
|
5
|
+
def initialize(fileInfo, force = false)
|
6
|
+
@file = fileInfo
|
7
|
+
@force = force
|
8
|
+
end
|
9
|
+
|
10
|
+
def create!
|
11
|
+
validate_should_write!
|
12
|
+
ensure_directory_exists
|
13
|
+
write_file
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def validate_should_write!
|
19
|
+
raise ArgumentError.new("A #{file.resource_type} already exists at #{file.path}") if File.exist?(file.path) and !force
|
20
|
+
end
|
21
|
+
|
22
|
+
def ensure_directory_exists
|
23
|
+
dir = File.dirname file.path
|
24
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
25
|
+
end
|
26
|
+
|
27
|
+
def write_file
|
28
|
+
File.open(file.path, "w") do |f|
|
29
|
+
f.puts(file.content)
|
30
|
+
end
|
31
|
+
|
32
|
+
puts "New #{file.resource_type} created at #{file.path}."
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Jekyll::Compose::FileInfo
|
2
|
+
attr_reader :params
|
3
|
+
def initialize(params)
|
4
|
+
@params = params
|
5
|
+
end
|
6
|
+
|
7
|
+
def file_name
|
8
|
+
name = Jekyll::Utils.slugify params.title
|
9
|
+
"#{name}.#{params.type}"
|
10
|
+
end
|
11
|
+
|
12
|
+
def content
|
13
|
+
<<-CONTENT.gsub /^\s+/, ''
|
14
|
+
---
|
15
|
+
layout: #{params.layout}
|
16
|
+
title: #{params.title}
|
17
|
+
---
|
18
|
+
CONTENT
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Compose
|
3
|
+
class FileMover
|
4
|
+
attr_reader :movement
|
5
|
+
def initialize(movement)
|
6
|
+
@movement = movement
|
7
|
+
end
|
8
|
+
|
9
|
+
def resource_type
|
10
|
+
'file'
|
11
|
+
end
|
12
|
+
|
13
|
+
def move
|
14
|
+
validate_source
|
15
|
+
ensure_directory_exists
|
16
|
+
move_file
|
17
|
+
end
|
18
|
+
|
19
|
+
def validate_source
|
20
|
+
raise ArgumentError.new("There was no #{resource_type} found at '#{movement.from}'.") unless File.exist? movement.from
|
21
|
+
end
|
22
|
+
|
23
|
+
def ensure_directory_exists
|
24
|
+
dir = File.dirname movement.to
|
25
|
+
Dir.mkdir(dir) unless Dir.exist?(dir)
|
26
|
+
end
|
27
|
+
|
28
|
+
def move_file
|
29
|
+
FileUtils.mv(movement.from, movement.to)
|
30
|
+
puts "#{resource_type.capitalize} #{movement.from} was moved to #{movement.to}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Compose
|
3
|
+
class MovementArgParser
|
4
|
+
attr_reader :args, :options
|
5
|
+
def initialize(args, options)
|
6
|
+
@args = args
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def validate!
|
11
|
+
raise ArgumentError.new("You must specify a #{resource_type} path.") if args.empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
def path
|
15
|
+
args.join ' '
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -6,48 +6,38 @@ module Jekyll
|
|
6
6
|
c.syntax 'draft NAME'
|
7
7
|
c.description 'Creates a new draft post with the given NAME'
|
8
8
|
|
9
|
-
c.option
|
10
|
-
c.option 'layout', '-l LAYOUT', '--layout LAYOUT', 'Specify the post layout'
|
11
|
-
c.option 'force', '-f', '--force', 'Overwrite a draft if it already exists'
|
9
|
+
options.each {|opt| c.option *opt }
|
12
10
|
|
13
|
-
c.action
|
14
|
-
Jekyll::Commands::Draft.process(args, options)
|
15
|
-
end
|
11
|
+
c.action { |args, options| process args, options }
|
16
12
|
end
|
17
13
|
end
|
18
14
|
|
19
|
-
def self.
|
20
|
-
|
15
|
+
def self.options
|
16
|
+
[
|
17
|
+
['extension', '-x EXTENSION', '--extension EXTENSION', 'Specify the file extension'],
|
18
|
+
['layout', '-l LAYOUT', '--layout LAYOUT', "Specify the draft layout"],
|
19
|
+
['force', '-f', '--force', 'Overwrite a draft if it already exists']
|
20
|
+
]
|
21
|
+
end
|
21
22
|
|
22
|
-
type = options["type"] || Jekyll::Compose::DEFAULT_TYPE
|
23
|
-
layout = options["layout"] || Jekyll::Compose::DEFAULT_LAYOUT
|
24
23
|
|
25
|
-
|
26
|
-
|
24
|
+
def self.process(args = [], options = {})
|
25
|
+
params = Compose::ArgParser.new args, options
|
26
|
+
params.validate!
|
27
27
|
|
28
|
-
|
28
|
+
draft = DraftFileInfo.new params
|
29
29
|
|
30
|
-
|
30
|
+
Compose::FileCreator.new(draft, params.force?).create!
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
class DraftFileInfo < Compose::FileInfo
|
34
|
+
def resource_type
|
35
|
+
'draft'
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
#
|
41
|
-
# Returns the filename of the draft, as a String
|
42
|
-
def self.draft_name(name, ext=Jekyll::Compose::DEFAULT_TYPE)
|
43
|
-
"_drafts/#{name}.#{ext}"
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.front_matter(layout, title)
|
47
|
-
{
|
48
|
-
"layout" => layout,
|
49
|
-
"title" => title,
|
50
|
-
}.to_yaml + "\n---\n"
|
38
|
+
def path
|
39
|
+
"_drafts/#{file_name}"
|
40
|
+
end
|
51
41
|
end
|
52
42
|
end
|
53
43
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Commands
|
3
|
+
class Page < Command
|
4
|
+
def self.init_with_program(prog)
|
5
|
+
prog.command(:page) do |c|
|
6
|
+
c.syntax 'page NAME'
|
7
|
+
c.description 'Creates a new page with the given NAME'
|
8
|
+
|
9
|
+
options.each {|opt| c.option *opt }
|
10
|
+
|
11
|
+
c.action { |args, options| process args, options }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.options
|
16
|
+
[
|
17
|
+
['extension', '-x EXTENSION', '--extension EXTENSION', 'Specify the file extension'],
|
18
|
+
['layout', '-l LAYOUT', '--layout LAYOUT', "Specify the page layout"],
|
19
|
+
['force', '-f', '--force', 'Overwrite a page if it already exists']
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.process(args = [], options = {})
|
24
|
+
params = PageArgParser.new args, options
|
25
|
+
params.validate!
|
26
|
+
|
27
|
+
page = PageFileInfo.new params
|
28
|
+
|
29
|
+
Compose::FileCreator.new(page, params.force?).create!
|
30
|
+
end
|
31
|
+
|
32
|
+
class PageArgParser < Compose::ArgParser
|
33
|
+
def layout
|
34
|
+
layout = options["layout"] || Jekyll::Compose::DEFAULT_LAYOUT_PAGE
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
class PageFileInfo < Compose::FileInfo
|
39
|
+
def resource_type
|
40
|
+
'page'
|
41
|
+
end
|
42
|
+
|
43
|
+
alias_method :path, :file_name
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/lib/jekyll/commands/post.rb
CHANGED
@@ -6,50 +6,53 @@ module Jekyll
|
|
6
6
|
c.syntax 'post NAME'
|
7
7
|
c.description 'Creates a new post with the given NAME'
|
8
8
|
|
9
|
-
c.option
|
10
|
-
|
11
|
-
c.
|
12
|
-
c.option 'force', '-f', '--force', 'Overwrite a post if it already exists'
|
13
|
-
|
14
|
-
c.action do |args, options|
|
15
|
-
Jekyll::Commands::Post.process(args, options)
|
16
|
-
end
|
9
|
+
options.each {|opt| c.option *opt }
|
10
|
+
|
11
|
+
c.action { |args, options| process args, options }
|
17
12
|
end
|
18
13
|
end
|
19
14
|
|
15
|
+
def self.options
|
16
|
+
[
|
17
|
+
['extension', '-x EXTENSION', '--extension EXTENSION', 'Specify the file extension'],
|
18
|
+
['layout', '-l LAYOUT', '--layout LAYOUT', "Specify the post layout"],
|
19
|
+
['force', '-f', '--force', 'Overwrite a post if it already exists'],
|
20
|
+
['date', '-d DATE', '--date DATE', 'Specify the post date']
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
20
24
|
def self.process(args = [], options = {})
|
21
|
-
|
25
|
+
params = PostArgParser.new args, options
|
26
|
+
params.validate!
|
22
27
|
|
23
|
-
|
24
|
-
layout = options["layout"] || Jekyll::Compose::DEFAULT_LAYOUT
|
28
|
+
post = PostFileInfo.new params
|
25
29
|
|
26
|
-
|
30
|
+
Compose::FileCreator.new(post, params.force?).create!
|
31
|
+
end
|
27
32
|
|
28
|
-
title = args.shift
|
29
|
-
name = title.gsub(' ', '-').downcase
|
30
33
|
|
31
|
-
|
34
|
+
class PostArgParser < Compose::ArgParser
|
35
|
+
def date
|
36
|
+
options["date"].nil? ? Time.now : DateTime.parse(options["date"])
|
37
|
+
end
|
38
|
+
end
|
32
39
|
|
33
|
-
|
40
|
+
class PostFileInfo < Compose::FileInfo
|
41
|
+
def resource_type
|
42
|
+
'post'
|
43
|
+
end
|
34
44
|
|
35
|
-
|
36
|
-
|
45
|
+
def path
|
46
|
+
"_posts/#{file_name}"
|
37
47
|
end
|
38
48
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
#
|
43
|
-
# Returns the filename of the draft, as a String
|
44
|
-
def self.file_name(name, ext, date)
|
45
|
-
"_posts/#{date.strftime('%Y-%m-%d')}-#{name}.#{ext}"
|
46
|
-
end
|
49
|
+
def file_name
|
50
|
+
"#{_date_stamp}-#{super}"
|
51
|
+
end
|
47
52
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
title: #{title}
|
52
|
-
---"
|
53
|
+
def _date_stamp
|
54
|
+
@params.date.strftime '%Y-%m-%d'
|
55
|
+
end
|
53
56
|
end
|
54
57
|
end
|
55
58
|
end
|
@@ -15,30 +15,51 @@ module Jekyll
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.process(args = [], options = {})
|
18
|
-
|
18
|
+
params = PublishArgParser.new args, options
|
19
|
+
params.validate!
|
19
20
|
|
20
|
-
|
21
|
-
draft_path = args.shift
|
21
|
+
movement = DraftMovementInfo.new params
|
22
22
|
|
23
|
-
|
23
|
+
mover = DraftMover.new movement
|
24
|
+
mover.move
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
24
28
|
|
25
|
-
|
26
|
-
|
29
|
+
class PublishArgParser < Compose::MovementArgParser
|
30
|
+
def resource_type
|
31
|
+
"draft"
|
32
|
+
end
|
27
33
|
|
28
|
-
|
34
|
+
def date
|
35
|
+
options["date"].nil? ? Date.today : Date.parse(options["date"])
|
29
36
|
end
|
30
37
|
|
31
|
-
|
32
|
-
|
33
|
-
# Returns the filename of the post, as a String
|
34
|
-
def self.post_name(date, name)
|
35
|
-
"_posts/#{date.strftime('%Y-%m-%d')}-#{name}"
|
38
|
+
def name
|
39
|
+
File.basename path
|
36
40
|
end
|
41
|
+
end
|
37
42
|
|
38
|
-
|
39
|
-
|
43
|
+
class DraftMovementInfo
|
44
|
+
attr_reader :params
|
45
|
+
def initialize(params)
|
46
|
+
@params = params
|
40
47
|
end
|
41
48
|
|
49
|
+
def from
|
50
|
+
params.path
|
51
|
+
end
|
52
|
+
|
53
|
+
def to
|
54
|
+
date_stamp = params.date.strftime '%Y-%m-%d'
|
55
|
+
"_posts/#{date_stamp}-#{params.name}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class DraftMover < Compose::FileMover
|
60
|
+
def resource_type
|
61
|
+
'draft'
|
62
|
+
end
|
42
63
|
end
|
43
64
|
end
|
44
65
|
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Commands
|
3
|
+
class Unpublish < Command
|
4
|
+
def self.init_with_program(prog)
|
5
|
+
prog.command(:unpublish) do |c|
|
6
|
+
c.syntax 'unpublish POST_PATH'
|
7
|
+
c.description 'Moves a post back into the _drafts directory'
|
8
|
+
|
9
|
+
c.action do |args, options|
|
10
|
+
process(args, options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.process(args = [], options = {})
|
16
|
+
params = UnpublishArgParser.new args, options
|
17
|
+
params.validate!
|
18
|
+
|
19
|
+
movement = PostMovementInfo.new params
|
20
|
+
|
21
|
+
mover = PostMover.new movement
|
22
|
+
mover.move
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
class UnpublishArgParser < Compose::MovementArgParser
|
28
|
+
def resource_type
|
29
|
+
'post'
|
30
|
+
end
|
31
|
+
|
32
|
+
def name
|
33
|
+
File.basename(path).sub /\d{4}-\d{2}-\d{2}-/, ''
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class PostMovementInfo
|
38
|
+
attr_reader :params
|
39
|
+
def initialize(params)
|
40
|
+
@params = params
|
41
|
+
end
|
42
|
+
|
43
|
+
def from
|
44
|
+
params.path
|
45
|
+
end
|
46
|
+
|
47
|
+
def to
|
48
|
+
"_drafts/#{params.name}"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class PostMover < Compose::FileMover
|
53
|
+
def resource_type
|
54
|
+
'post'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-compose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Parker Moore
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -74,10 +74,17 @@ extensions: []
|
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
76
|
- lib/jekyll-compose.rb
|
77
|
+
- lib/jekyll-compose/arg_parser.rb
|
78
|
+
- lib/jekyll-compose/file_creator.rb
|
79
|
+
- lib/jekyll-compose/file_info.rb
|
80
|
+
- lib/jekyll-compose/file_mover.rb
|
81
|
+
- lib/jekyll-compose/movement_arg_parser.rb
|
77
82
|
- lib/jekyll-compose/version.rb
|
78
83
|
- lib/jekyll/commands/draft.rb
|
84
|
+
- lib/jekyll/commands/page.rb
|
79
85
|
- lib/jekyll/commands/post.rb
|
80
86
|
- lib/jekyll/commands/publish.rb
|
87
|
+
- lib/jekyll/commands/unpublish.rb
|
81
88
|
homepage: https://github.com/jekyll/jekyll-compose
|
82
89
|
licenses:
|
83
90
|
- MIT
|
@@ -98,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
98
105
|
version: '0'
|
99
106
|
requirements: []
|
100
107
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.2.
|
108
|
+
rubygems_version: 2.2.3
|
102
109
|
signing_key:
|
103
110
|
specification_version: 4
|
104
111
|
summary: Streamline your writing in Jekyll with these commands.
|