mkmatter 3.0.26
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 +7 -0
- data/.github/issue_template.md +7 -0
- data/.gitignore +14 -0
- data/.gitlab-ci.yml +24 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/LICENSE.txt +21 -0
- data/README.md +99 -0
- data/Rakefile +8 -0
- data/bin/console +16 -0
- data/bin/mkmatter +10 -0
- data/bin/setup +8 -0
- data/lib/mkmatter/answers.rb +79 -0
- data/lib/mkmatter/cli/app.rb +102 -0
- data/lib/mkmatter/cli/descriptions.rb +44 -0
- data/lib/mkmatter/cli/methods.rb +82 -0
- data/lib/mkmatter/cli/runner.rb +51 -0
- data/lib/mkmatter/cli/subs/new.rb +159 -0
- data/lib/mkmatter/cli/subs/tags.rb +59 -0
- data/lib/mkmatter/cli/subs.rb +2 -0
- data/lib/mkmatter/cli/tags.rb +67 -0
- data/lib/mkmatter/cli.rb +5 -0
- data/lib/mkmatter/common.rb +81 -0
- data/lib/mkmatter/gem_info.rb +22 -0
- data/lib/mkmatter/questions.rb +55 -0
- data/lib/mkmatter/version.rb +3 -0
- data/lib/mkmatter.rb +12 -0
- data/mkmatter.gemspec +54 -0
- metadata +304 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5820176bd7d2e83b046fea9d79bf535e7c8090a4
|
4
|
+
data.tar.gz: b4a73fb3ccea1a7569253138b407260e45a14dd5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 88a64684f76531d7c27c11f40222aa5d7e3a08f845ccf7d7261b3e874000c9d662f10f41d81b38da0018a55f31cc700103e72251a5caf4e273701bffff1afd2b
|
7
|
+
data.tar.gz: 9c1a898a666ab077ea9ffa6affb1442819ff31ae7faab37d7ea4edfa76b5849c3211d7373c20ff5529b4c1c300d7c699c1f3abff3c437b07267966bcfb94eb57
|
data/.gitignore
ADDED
data/.gitlab-ci.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
image: ruby:2.3
|
2
|
+
|
3
|
+
cache:
|
4
|
+
paths:
|
5
|
+
- vendor/
|
6
|
+
|
7
|
+
before_script:
|
8
|
+
- export LC_ALL="C.UTF-8"
|
9
|
+
- export LANG="en_US.UTF-8"
|
10
|
+
- export LANGUAGE="en_US.UTF-8"
|
11
|
+
|
12
|
+
build:
|
13
|
+
stage: build
|
14
|
+
script:
|
15
|
+
- bundle install --path vendor/bundle
|
16
|
+
only:
|
17
|
+
- master
|
18
|
+
- tags
|
19
|
+
|
20
|
+
test:
|
21
|
+
stage: test
|
22
|
+
script:
|
23
|
+
- bundle install --path vendor/bundle
|
24
|
+
- rake spec
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2018 Ken Spencer
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 Ken Spencer
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
# mkmatter
|
2
|
+
|
3
|
+
###### Builds & Links
|
4
|
+
[](https://travis-ci.org/IotaSpencer/mkmatter)
|
5
|
+
[](https://travis-ci.org/IotaSpencer/mkmatter)
|
6
|
+
|
7
|
+
[](https://rubygems.org/gems/mkmatter)
|
8
|
+
[](https://github.com/IotaSpencer/mkmatter/tree/v3.0.1)
|
9
|
+
|
10
|
+
[](https://rubygems.org/gems/mkmatter)
|
11
|
+
[](https://rubygems.org/gems/mkmatter)
|
12
|
+
[](https://github.com/IotaSpencer/mkmatter/tree/v3.0.1)
|
13
|
+
|
14
|
+
###### Badges
|
15
|
+
|
16
|
+
[](https://opensource.org/licenses/MIT)
|
17
|
+
[](https://forthebadge.com)
|
18
|
+
[](https://forthebadge.com)
|
19
|
+
[](https://forthebadge.com)
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
## Contact
|
24
|
+
|
25
|
+
[](mailto:me@iotaspencer.me)
|
26
|
+
[](https://iotaspencer.me)
|
27
|
+
[](https://iotaspencer.me/projects/mkmatter)
|
28
|
+
[](https://twitter.com/IotaEcode)
|
29
|
+
|
30
|
+
## About mkmatter
|
31
|
+
|
32
|
+
'mkmatter' is a gem designed to make it easy to generate front matter for files and also subsequently edit them.
|
33
|
+
|
34
|
+
**Note**: Just like Jekyll there are minimal constraints on what is needed to build, but for `mkmatter` all I ask is that there is a `_config.yml` in your site source root, so the executable knows where it is in the filesystem.
|
35
|
+
|
36
|
+
This is needed for any part that `reads from/writes to` the filesystem.
|
37
|
+
|
38
|
+
## Installation
|
39
|
+
|
40
|
+
Add this line to your application's Gemfile:
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
gem 'mkmatter'
|
44
|
+
```
|
45
|
+
|
46
|
+
And then execute:
|
47
|
+
|
48
|
+
$ bundle install
|
49
|
+
|
50
|
+
### Standalone
|
51
|
+
|
52
|
+
To install to the system/user instead of a project, use the following
|
53
|
+
|
54
|
+
#### System-wide
|
55
|
+
As root or by using sudo, run:
|
56
|
+
|
57
|
+
```$ gem install mkmatter```
|
58
|
+
|
59
|
+
or
|
60
|
+
|
61
|
+
```$ sudo gem install mkmatter```
|
62
|
+
|
63
|
+
#### User
|
64
|
+
|
65
|
+
```$ gem install --user-install mkmatter```
|
66
|
+
|
67
|
+
## Usage
|
68
|
+
|
69
|
+
### Using 'mkmatter'
|
70
|
+
|
71
|
+
If you want to use 'mkmatter', an executable that ships with `mkmatter`, you gots to run it
|
72
|
+
|
73
|
+
**Note**: Due to minimal constraints in Jekyll, I require at least an empty `_config.yml` file at the root of your source directory.
|
74
|
+
|
75
|
+
**P.S.**: **It does not have to have any directives, it can be an empty file.**
|
76
|
+
|
77
|
+
#### Command 'new'
|
78
|
+
|
79
|
+
1. 'new' is for generating front matter and content
|
80
|
+
|
81
|
+
1. The current commands under 'new' are 'post' and 'page'
|
82
|
+
|
83
|
+
Which will ask you questions about the content you want to put out.
|
84
|
+
* The script also will open an editor (the 'editor' command) if allowed to, as to allow the user to begin editing their file, front-matter already included.
|
85
|
+
|
86
|
+
## Contributing
|
87
|
+
|
88
|
+
* I am open to the idea of adding more questions/modules if there are plugins that require more configuration in the front matter. Just let me know!
|
89
|
+
|
90
|
+
* [Bug Reports](https://github.com/IotaSpencer/mkmatter/issues)
|
91
|
+
* [Pull Requests](https://github.com/IotaSpencer/mkmatter/pulls)
|
92
|
+
|
93
|
+
<!--
|
94
|
+
**Tutorial**: [mkmatter Tutorial on IotaSpencer.me](https://iotaspencer.me/2018-02-XX-mkmatter-tutorial)
|
95
|
+
-->
|
96
|
+
|
97
|
+
## License
|
98
|
+
|
99
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'mkmatter'
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
#require 'irb'
|
14
|
+
#IRB.start(__FILE__)
|
15
|
+
require 'pry'
|
16
|
+
Pry.start
|
data/bin/mkmatter
ADDED
data/bin/setup
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'active_support/all'
|
3
|
+
require 'highline'
|
4
|
+
module Mkmatter
|
5
|
+
class Answers
|
6
|
+
attr_accessor :title, :tags, :categories
|
7
|
+
attr_accessor :date, :layout, :draft
|
8
|
+
attr_accessor :slug_date, :answer_hash
|
9
|
+
attr_accessor :published, :file_format
|
10
|
+
attr_reader :matter
|
11
|
+
|
12
|
+
def initialize(question_hash, publish)
|
13
|
+
|
14
|
+
@layout = question_hash[:layout]
|
15
|
+
@title = question_hash[:title]
|
16
|
+
@tags = question_hash[:tags]
|
17
|
+
@categories = question_hash[:categories]
|
18
|
+
Time.zone = question_hash[:time_zone]
|
19
|
+
now = Time.zone.now
|
20
|
+
@date = now.to_s
|
21
|
+
@slug_date = now.strftime('%Y-%m-%d')
|
22
|
+
@published = publish
|
23
|
+
@file_format = question_hash[:file_format]
|
24
|
+
@keywords = question_hash[:keywords]
|
25
|
+
@description = question_hash[:description]
|
26
|
+
@matter = {
|
27
|
+
layout: @layout,
|
28
|
+
title: @title,
|
29
|
+
categories: @categories,
|
30
|
+
tags: @tags,
|
31
|
+
date: @date,
|
32
|
+
}
|
33
|
+
@matter[:published] = @published if publish
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Hash] returns attribute `.matter`
|
37
|
+
def to_h
|
38
|
+
@matter
|
39
|
+
end
|
40
|
+
|
41
|
+
# @param [Hash] hash other hash
|
42
|
+
# @return [nil] merges hash into attribute `.matter`
|
43
|
+
def to_h=(hash)
|
44
|
+
@matter.merge!(hash)
|
45
|
+
end
|
46
|
+
|
47
|
+
alias_method :inspect, :to_h
|
48
|
+
#
|
49
|
+
# Dumps all file applicable metadata to a provided output.
|
50
|
+
# @param [Boolean] to_file A path or filename
|
51
|
+
# @param [Boolean] stdout Whether to print to stdout
|
52
|
+
def dump
|
53
|
+
custom_fields = nil
|
54
|
+
hl = HighLine.new($stdin, $stderr, 80)
|
55
|
+
# Custom matter
|
56
|
+
if hl.agree('Do you want to add custom fields? (usable as {{LAYOUT_TYPE.FIELD}} in templates) ', true)
|
57
|
+
hl.say('Your fields should be inputted as FIELD=>TEXT HERE')
|
58
|
+
hl.say("Enter 'EOL' on a new line and press enter when you are done.")
|
59
|
+
hl.say("<% HighLine.color('NOTE', :bold, :red) %>: Input is <% HighLine.color('NOT', :bold, :red) %> evaluated!")
|
60
|
+
custom_fields = hl.ask('Fields?') do |q|
|
61
|
+
q.gather = /^EOL$/
|
62
|
+
end
|
63
|
+
end
|
64
|
+
if custom_fields
|
65
|
+
fields = Hash.new
|
66
|
+
custom_fields.each do |field|
|
67
|
+
field = field.split(/=>/)
|
68
|
+
fields.store(field[0].to_s, field[1])
|
69
|
+
end
|
70
|
+
self.to_h = fields
|
71
|
+
elsif custom_fields.nil?
|
72
|
+
hl.say('No extra fields were added.')
|
73
|
+
else
|
74
|
+
end
|
75
|
+
self.to_h.stringify_keys.to_yaml(indentation: 2)
|
76
|
+
'---'
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'highline'
|
3
|
+
require 'slugity/extend_string'
|
4
|
+
require 'yaml'
|
5
|
+
require 'active_support/all'
|
6
|
+
require 'terminal-table'
|
7
|
+
require 'os'
|
8
|
+
require 'rbconfig'
|
9
|
+
|
10
|
+
require 'mkmatter'
|
11
|
+
require 'mkmatter/cli/subs'
|
12
|
+
module Mkmatter
|
13
|
+
module App
|
14
|
+
class CLI < Thor
|
15
|
+
include Thor::Actions
|
16
|
+
HILINE = HighLine.new($stdin, $stderr, 80)
|
17
|
+
map %w[--version -v] => :__print_version
|
18
|
+
desc '--version, -v', 'Print the version'
|
19
|
+
|
20
|
+
# Prints version string
|
21
|
+
def __print_version
|
22
|
+
puts Mkmatter::VERSION
|
23
|
+
end
|
24
|
+
|
25
|
+
map %w[--debug -d] => :__debug
|
26
|
+
desc '--debug, -d', 'Prints debug info about the script/gem'
|
27
|
+
# Prints debug info
|
28
|
+
def __debug
|
29
|
+
info = Mkmatter::GemInfo.new
|
30
|
+
report = YAML.safe_load(OS.report)
|
31
|
+
rows = {
|
32
|
+
'mkmatter_version' => Mkmatter::VERSION,
|
33
|
+
'ruby_version' => RbConfig::CONFIG['RUBY_PROGRAM_VERSION'],
|
34
|
+
}
|
35
|
+
rows.merge! report
|
36
|
+
rows.merge!({
|
37
|
+
'ruby_bin' => OS.ruby_bin,
|
38
|
+
'windows' => OS.windows?,
|
39
|
+
'posix' => OS.posix?,
|
40
|
+
'mac' => OS.mac?,
|
41
|
+
'under windows' => OS::Underlying.windows?,
|
42
|
+
'under bsd' => OS::Underlying.bsd?
|
43
|
+
})
|
44
|
+
table = Terminal::Table.new
|
45
|
+
table.style.width = 80
|
46
|
+
table.style.border_top = false
|
47
|
+
table.title = 'mkmatter Debug Info'
|
48
|
+
table.rows = rows.to_a
|
49
|
+
table.align_column(0, :left)
|
50
|
+
width = table.style.width - 2
|
51
|
+
print '+', '-' * width, '+'
|
52
|
+
puts
|
53
|
+
puts table
|
54
|
+
puts
|
55
|
+
end
|
56
|
+
|
57
|
+
map %w[--info -i] => :__print_info
|
58
|
+
desc '--info, -i', 'Print script/gem info'
|
59
|
+
method_option :'info-format', :type => :string, desc: 'The format of info', enum: %w(table yaml), default: 'table'
|
60
|
+
def __print_info
|
61
|
+
format = options[:'info-format']
|
62
|
+
rows = {
|
63
|
+
'Author(s)': Mkmatter::GemInfo.authors,
|
64
|
+
'E-Mail': Mkmatter::GemInfo.email,
|
65
|
+
'mkmatter-Version': Mkmatter::VERSION,
|
66
|
+
'RubyGems-Version': RbConfig::CONFIG['RUBY_PROGRAM_VERSION'],
|
67
|
+
'Platform': RbConfig::CONFIG['build_os']
|
68
|
+
}
|
69
|
+
case format
|
70
|
+
when 'table'
|
71
|
+
table = Terminal::Table.new
|
72
|
+
table.style.width = 60
|
73
|
+
table.style.border_top = false
|
74
|
+
table.style.alignment = :center
|
75
|
+
table.title = 'mkmatter Info'
|
76
|
+
table.rows = rows.to_a
|
77
|
+
table.align_column(0, :left)
|
78
|
+
width = table.style.width - 2
|
79
|
+
print '+', '-' * width, '+'
|
80
|
+
puts
|
81
|
+
puts table
|
82
|
+
puts
|
83
|
+
when 'yaml'
|
84
|
+
puts rows.stringify_keys.to_yaml
|
85
|
+
|
86
|
+
else
|
87
|
+
# noop
|
88
|
+
# this doesn't get run because of
|
89
|
+
# the logic of options and their
|
90
|
+
# enum parameter.
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
desc 'new SUBCOMMAND [options]', 'Make new content'
|
95
|
+
subcommand 'new', Mkmatter::App::Classes::NewContent
|
96
|
+
desc 'tags SUBCOMMAND [options]', 'Generate or Create tags'
|
97
|
+
subcommand 'tags', Mkmatter::App::Classes::Tags
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'highline'
|
2
|
+
HighLine.colorize_strings
|
3
|
+
|
4
|
+
module Mkmatter
|
5
|
+
module App
|
6
|
+
module Descriptions
|
7
|
+
module New
|
8
|
+
PAGE = <<-PAGEDOC
|
9
|
+
`mkmatter new page` will run you through making a jekyll page.
|
10
|
+
|
11
|
+
Given the above options/flags you can modify how the script
|
12
|
+
|
13
|
+
outputs your front matter, or whether to mark it as published.
|
14
|
+
|
15
|
+
PAGEDOC
|
16
|
+
|
17
|
+
POST = <<-POSTDOC
|
18
|
+
`mkmatter new post` will run you through making a jekyll post.
|
19
|
+
|
20
|
+
Given the above options/flags you can modify how the script
|
21
|
+
|
22
|
+
outputs your front matter, and whether to mark it as published,
|
23
|
+
|
24
|
+
or as a draft and move it into `_drafts`.
|
25
|
+
|
26
|
+
NOTES:
|
27
|
+
|
28
|
+
|
29
|
+
By default Jekyll will publish a post if `published` is omitted in
|
30
|
+
|
31
|
+
the front matter. So if you omit `--publish` you will publish,
|
32
|
+
|
33
|
+
so you have to explicitly use --no-publish to set `#{HighLine.color('published', :yellow)}: #{HighLine.color('false', :yellow, :bold)}`
|
34
|
+
|
35
|
+
POSTDOC
|
36
|
+
end
|
37
|
+
module Tags
|
38
|
+
GEN = <<-GENDOC
|
39
|
+
|
40
|
+
GENDOC
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'highline'
|
2
|
+
require 'find'
|
3
|
+
require 'yaml'
|
4
|
+
module Mkmatter
|
5
|
+
class Methods
|
6
|
+
def Methods.check_if_jekyll
|
7
|
+
cwd = Pathname.new('.')
|
8
|
+
cwd.ascend do |path|
|
9
|
+
if path.join('_config.yml').exist?
|
10
|
+
break true
|
11
|
+
elsif cwd.to_s == '/'
|
12
|
+
# hit root, stop
|
13
|
+
break false
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def Methods.get_jekyll_root
|
19
|
+
if Methods.check_if_jekyll
|
20
|
+
cwd = Pathname.new('.').realdirpath
|
21
|
+
cwd.ascend do |path|
|
22
|
+
if path.join('_config.yml').exist?
|
23
|
+
return path
|
24
|
+
else
|
25
|
+
next
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def Methods.launch_editor(file_path)
|
32
|
+
hl = HighLine.new($stdin, $stderr, 80)
|
33
|
+
if file_path
|
34
|
+
if hl.agree("Would you like to open an editor? ('editor' command) ", true)
|
35
|
+
pid = spawn("editor #{file_path}")
|
36
|
+
Process.wait pid
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
def Methods.find_front_matter(type, key)
|
43
|
+
unless type =~ /^(post|page)$/
|
44
|
+
$stderr.puts "#{HighLine.color('Error', :red, :bold)}: Invalid Argument, allowed values: post, page"
|
45
|
+
exit 1
|
46
|
+
end
|
47
|
+
yaml_loader = ->(string) {YAML.load(string)}
|
48
|
+
files = {}
|
49
|
+
html_front_matter = []
|
50
|
+
md_front_matter = []
|
51
|
+
front_matter = {}
|
52
|
+
case type
|
53
|
+
when 'page'
|
54
|
+
Find.find(Methods.get_jekyll_root.to_s) do |path|
|
55
|
+
Find.prune if path =~ /(_includes|_layouts|_docs|_site)/ # don't include layouts, includes, site, docs
|
56
|
+
Find.prune if path =~ /(_posts)/ # don't include our own posts either
|
57
|
+
Find.prune if path =~ /(vendor\/bundle)/ # don't include vendor/
|
58
|
+
Find.prune if path =~ /(\/tag\/)/ # don't include our own tags
|
59
|
+
html_front_matter << path if path =~ /.*\.html$/
|
60
|
+
md_front_matter << path if path =~ /.*\.md$/
|
61
|
+
end
|
62
|
+
|
63
|
+
when 'post'
|
64
|
+
Find.find(Pathname(Methods.get_jekyll_root).join('_posts').to_path) do |path|
|
65
|
+
html_front_matter << path if path =~ /.*\.html$/
|
66
|
+
md_front_matter << path if path =~ /.*\.md$/
|
67
|
+
end
|
68
|
+
else
|
69
|
+
# noop
|
70
|
+
end
|
71
|
+
files['html'] = html_front_matter
|
72
|
+
files['md'] = md_front_matter
|
73
|
+
files.each do |ftype, array|
|
74
|
+
array.each do |ele|
|
75
|
+
front_matter[ele] = YAML.load_file(ele)[key]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
front_matter.select! {|k, v| !v.nil?}
|
79
|
+
front_matter
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'mkmatter/cli/app'
|
2
|
+
|
3
|
+
module Mkmatter
|
4
|
+
module App
|
5
|
+
class Runner
|
6
|
+
# Allow everything fun to be injected from the outside while defaulting to normal implementations.
|
7
|
+
def initialize(argv, stdin = STDIN, stdout = STDOUT, stderr = STDERR, kernel = Kernel)
|
8
|
+
@argv, @stdin, @stdout, @stderr, @kernel = argv, stdin, stdout, stderr, kernel
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute!
|
12
|
+
exit_code = begin
|
13
|
+
# Thor accesses these streams directly rather than letting them be injected, so we replace them...
|
14
|
+
$stderr = @stderr
|
15
|
+
$stdin = @stdin
|
16
|
+
$stdout = @stdout
|
17
|
+
|
18
|
+
# Run our normal Thor app the way we know and love.
|
19
|
+
Mkmatter::App::CLI.start(@argv)
|
20
|
+
|
21
|
+
# Thor::Base#start does not have a return value, assume success if no exception is raised.
|
22
|
+
0
|
23
|
+
rescue StandardError => e
|
24
|
+
# The ruby interpreter would pipe this to STDERR and exit 1 in the case of an unhandled exception
|
25
|
+
b = e.backtrace
|
26
|
+
@stderr.puts("#{b.shift}: #{e.message} (#{e.class})")
|
27
|
+
@stderr.puts(b.map {|s| "\tfrom #{s}"}.join("\n"))
|
28
|
+
1
|
29
|
+
rescue SystemExit => e
|
30
|
+
e.status
|
31
|
+
ensure
|
32
|
+
# TODO: reset your app here, free up resources, etc.
|
33
|
+
# Examples:
|
34
|
+
# MyApp.logger.flush
|
35
|
+
# MyApp.logger.close
|
36
|
+
# MyApp.logger = nil
|
37
|
+
#
|
38
|
+
# MyApp.reset_singleton_instance_variables
|
39
|
+
|
40
|
+
# ...then we put the streams back.
|
41
|
+
$stderr = STDERR
|
42
|
+
$stdin = STDIN
|
43
|
+
$stdout = STDOUT
|
44
|
+
end
|
45
|
+
|
46
|
+
# Proxy our exit code back to the injected kernel.
|
47
|
+
@kernel.exit(exit_code)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|