Merge pull request #30 from vssio/feat-config-ignore-files

Feat: setting ignore files
main
TSURUTA Takumi 2 years ago committed by GitHub
commit 8abbc68c62
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -30,7 +30,7 @@ tasks:
test: test:
desc: Run test desc: Run test
cmds: cmds:
- v test commands/ - v test .
vet: vet:
desc: Report suspicious code constructs desc: Report suspicious code constructs
@ -41,8 +41,9 @@ tasks:
desc: Format .v files desc: Format .v files
cmds: cmds:
- v fmt -w *.v - v fmt -w *.v
- v fmt -w commands/*.v - v fmt -w commands
- v fmt -w template/*.v - v fmt -w internal/template
- v fmt -w internal/config/
clean: clean:
desc: Clean test files desc: Clean test files
@ -61,6 +62,11 @@ tasks:
cmds: cmds:
- v . -o {{.TARGET}} - v . -o {{.TARGET}}
prod-build:
desc: Build vss for production
cmds:
- v -prod . -o {{.TARGET}}
example: example:
desc: Setup for example desc: Setup for example
cmds: cmds:

@ -4,16 +4,13 @@ import os
import cli import cli
import log import log
import time import time
import toml
import regex import regex
import markdown import markdown
import template import internal.template
import internal.config
const default_config = 'config.toml' const default_config = 'config.toml'
// Allowed parameters
const config_params = ['title', 'description', 'baseUrl']
const default_template = 'layouts/index.html' const default_template = 'layouts/index.html'
const defautl_static = 'static' const defautl_static = 'static'
@ -43,19 +40,6 @@ fn read_file(filename string) ?string {
return contents 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 { fn get_html_path(md_path string) string {
mut file_name := os.file_name(md_path) mut file_name := os.file_name(md_path)
file_name = file_name.replace('.md', '.html') 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)? 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')) md_paths := normalise_paths(os.walk_ext('.', '.md'))
logger.info('start md to html') logger.info('start md to html')
for path in md_paths { 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)? mut md := os.read_file(path)?
md = pre_proc_md_to_html(md)? md = pre_proc_md_to_html(md)?
contents := markdown.to_html(md) contents := markdown.to_html(md)

@ -1,7 +1,5 @@
module commands module commands
import os
fn test_get_html_filename() { fn test_get_html_filename() {
test_path := 'index.md' test_path := 'index.md'
mut html_name := get_html_path(test_path) mut html_name := get_html_path(test_path)

@ -0,0 +1,3 @@
# Example project
This is vss example project.

@ -1,6 +1,6 @@
title = "Open Sea" title = "Open Sea"
description = "Takumi Tsuruta's home page" description = "Takumi Tsuruta's home page"
# baseUrl = 'https://zztkm.github.io/vss/' # base_url = 'https://zztkm.github.io/vss/'
[build] [build]
ignoreFiles = ["ignore.md", "README.md"] ignore_files = ["ignore.md", "README.md"]

@ -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
}

@ -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…
Cancel
Save