Merge pull request #30 from vssio/feat-config-ignore-files
Feat: setting ignore files
This commit is contained in:
commit
8abbc68c62
8 changed files with 87 additions and 26 deletions
12
Taskfile.yml
12
Taskfile.yml
|
@ -30,7 +30,7 @@ tasks:
|
|||
test:
|
||||
desc: Run test
|
||||
cmds:
|
||||
- v test commands/
|
||||
- v test .
|
||||
|
||||
vet:
|
||||
desc: Report suspicious code constructs
|
||||
|
@ -41,8 +41,9 @@ tasks:
|
|||
desc: Format .v files
|
||||
cmds:
|
||||
- v fmt -w *.v
|
||||
- v fmt -w commands/*.v
|
||||
- v fmt -w template/*.v
|
||||
- v fmt -w commands
|
||||
- v fmt -w internal/template
|
||||
- v fmt -w internal/config/
|
||||
|
||||
clean:
|
||||
desc: Clean test files
|
||||
|
@ -61,6 +62,11 @@ tasks:
|
|||
cmds:
|
||||
- v . -o {{.TARGET}}
|
||||
|
||||
prod-build:
|
||||
desc: Build vss for production
|
||||
cmds:
|
||||
- v -prod . -o {{.TARGET}}
|
||||
|
||||
example:
|
||||
desc: Setup for example
|
||||
cmds:
|
||||
|
|
|
@ -4,16 +4,13 @@ import os
|
|||
import cli
|
||||
import log
|
||||
import time
|
||||
import toml
|
||||
import regex
|
||||
import markdown
|
||||
import template
|
||||
import internal.template
|
||||
import internal.config
|
||||
|
||||
const default_config = 'config.toml'
|
||||
|
||||
// Allowed parameters
|
||||
const config_params = ['title', 'description', 'baseUrl']
|
||||
|
||||
const default_template = 'layouts/index.html'
|
||||
|
||||
const defautl_static = 'static'
|
||||
|
@ -43,19 +40,6 @@ fn read_file(filename string) ?string {
|
|||
return contents
|
||||
}
|
||||
|
||||
fn get_config_map() ?map[string]string {
|
||||
mut config_map := map[string]string{}
|
||||
|
||||
// https://modules.vlang.io/toml.html
|
||||
toml_str := read_file(commands.default_config)?
|
||||
config := toml.parse_text(toml_str)?
|
||||
for param in commands.config_params {
|
||||
v := config.value_opt(param) or { continue }
|
||||
config_map[param] = v.string()
|
||||
}
|
||||
return config_map
|
||||
}
|
||||
|
||||
fn get_html_path(md_path string) string {
|
||||
mut file_name := os.file_name(md_path)
|
||||
file_name = file_name.replace('.md', '.html')
|
||||
|
@ -112,11 +96,19 @@ fn build(mut logger log.Log) ? {
|
|||
}
|
||||
|
||||
template_content := os.read_file(commands.default_template)?
|
||||
mut config_map := get_config_map()?
|
||||
|
||||
toml_text := read_file(commands.default_config)?
|
||||
config := config.load(toml_text)?
|
||||
mut config_map := config.as_map()
|
||||
|
||||
md_paths := normalise_paths(os.walk_ext('.', '.md'))
|
||||
logger.info('start md to html')
|
||||
for path in md_paths {
|
||||
file_name := os.file_name(path)
|
||||
if file_name in config.build.ignore_files {
|
||||
logger.info('$file_name is included in ignore_files, skip build')
|
||||
continue
|
||||
}
|
||||
mut md := os.read_file(path)?
|
||||
md = pre_proc_md_to_html(md)?
|
||||
contents := markdown.to_html(md)
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
module commands
|
||||
|
||||
import os
|
||||
|
||||
fn test_get_html_filename() {
|
||||
test_path := 'index.md'
|
||||
mut html_name := get_html_path(test_path)
|
||||
|
|
3
example/README.md
Normal file
3
example/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Example project
|
||||
|
||||
This is vss example project.
|
|
@ -1,6 +1,6 @@
|
|||
title = "Open Sea"
|
||||
description = "Takumi Tsuruta's home page"
|
||||
# baseUrl = 'https://zztkm.github.io/vss/'
|
||||
# base_url = 'https://zztkm.github.io/vss/'
|
||||
|
||||
[build]
|
||||
ignoreFiles = ["ignore.md", "README.md"]
|
||||
ignore_files = ["ignore.md", "README.md"]
|
40
internal/config/config.v
Normal file
40
internal/config/config.v
Normal file
|
@ -0,0 +1,40 @@
|
|||
module config
|
||||
|
||||
import toml
|
||||
|
||||
// template_params list of field names to convert as_map
|
||||
const template_params = ['title', 'description', 'base_url']
|
||||
|
||||
// Build settings for build
|
||||
struct Build {
|
||||
pub mut:
|
||||
ignore_files []string
|
||||
}
|
||||
|
||||
// Config general settings for vss
|
||||
struct Config {
|
||||
pub mut:
|
||||
build Build
|
||||
title string
|
||||
description string
|
||||
base_url string
|
||||
}
|
||||
|
||||
// load
|
||||
pub fn load(toml_text string) ?Config {
|
||||
doc := toml.parse_text(toml_text)?
|
||||
|
||||
mut config := doc.reflect<Config>()
|
||||
config.build = doc.value('build').reflect<Build>()
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
// as_map for template.parse
|
||||
pub fn (c Config) as_map() map[string]string {
|
||||
mut mp := map[string]string{}
|
||||
mp['title'] = c.title
|
||||
mp['description'] = c.description
|
||||
mp['base_url'] = c.base_url
|
||||
return mp
|
||||
}
|
22
internal/config/config_test.v
Normal file
22
internal/config/config_test.v
Normal file
|
@ -0,0 +1,22 @@
|
|||
module config
|
||||
|
||||
const toml_text = '# for test
|
||||
title = "test site"
|
||||
description = "test page"
|
||||
base_url = "https://vss.github.io/vss/"
|
||||
|
||||
[build]
|
||||
ignore_files = ["ignore.md", "README.md"]
|
||||
'
|
||||
|
||||
fn test_load() {
|
||||
config := load(config.toml_text) or {
|
||||
eprintln(err)
|
||||
return
|
||||
}
|
||||
|
||||
assert config.title == 'test site'
|
||||
assert config.description == 'test page'
|
||||
assert config.base_url == 'https://vss.github.io/vss/'
|
||||
assert config.build.ignore_files == ['ignore.md', 'README.md']
|
||||
}
|
Loading…
Add table
Reference in a new issue