Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions exampleSite/content/tests/camelcase.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
title: camelcase
outputs: ["json"]
---
19 changes: 19 additions & 0 deletions exampleSite/data/structures/test-camel.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
comment: >-
Test fixture for arguments DECLARED in camelCase (regression: camel-key used to lowercase
the whole first word, storing provided values under a key consumers never read).
arguments:
overlayMode:
type: select
optional: true
default: dark
options:
values: [light, dark, none]
logo-align:
type: select
optional: true
default: start
options:
values: [start, center, end]
plainkey:
type: string
optional: true
21 changes: 21 additions & 0 deletions exampleSite/data/tests/camelcase.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
cases:
# Regression: a value provided under a camelCase-DECLARED key must surface under that key
# (camelKey == declared key), not be silently replaced by the schema default.
- name: camel-declared-provided
structure: test-camel
args: {overlayMode: light}
- name: camel-declared-defaulted
structure: test-camel
args: {}
# Contrast: kebab-declared keys keep their existing camelization (logo-align -> logoAlign).
- name: kebab-declared-provided
structure: test-camel
args: {logo-align: center}
# All-lowercase declared keys are unaffected.
- name: lowercase-declared-provided
structure: test-camel
args: {plainkey: value}
# The compiled schema exposes the camelKeys directly.
- name: schema-camel-keys
structure: test-camel
api: schema
6 changes: 5 additions & 1 deletion layouts/_partials/utilities/ArgsSchema.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,11 @@
{{ if gt $index 0 }}
{{ $result = print $result (strings.FirstUpper $word) }}
{{ else }}
{{ $result = strings.ToLower $word }}
{{/* lowercase only the first rune: a key DECLARED in camelCase (e.g.
`overlayMode`) must keep its interior capitals, otherwise provided
values are stored under a camelKey (`overlaymode`) that consuming
partials never read and silently fall back to defaults */}}
{{ $result = print (strings.ToLower (substr $word 0 1)) (substr $word 1) }}
{{ end }}
{{ end }}
{{ return print $prefix $result }}
Expand Down
196 changes: 196 additions & 0 deletions tests/golden/camelcase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
{
"camel-declared-defaulted": {
"args": {
"args": {
"logoAlign": "start",
"overlayMode": "dark"
},
"defaulted": [
"logo-align",
"overlayMode"
],
"err": false,
"errmsg": [],
"warnmsg": []
},
"initargs": {
"default": [
"logo-align",
"overlayMode"
],
"err": false,
"errmsg": [],
"logo-align": "start",
"logoAlign": "start",
"overlayMode": "dark",
"warnmsg": []
}
},
"camel-declared-provided": {
"args": {
"args": {
"logoAlign": "start",
"overlayMode": "light"
},
"defaulted": [
"logo-align"
],
"err": false,
"errmsg": [],
"warnmsg": []
},
"initargs": {
"default": [
"logo-align"
],
"err": false,
"errmsg": [],
"logo-align": "start",
"logoAlign": "start",
"overlayMode": "light",
"warnmsg": []
}
},
"kebab-declared-provided": {
"args": {
"args": {
"logoAlign": "center",
"overlayMode": "dark"
},
"defaulted": [
"overlayMode"
],
"err": false,
"errmsg": [],
"warnmsg": []
},
"initargs": {
"default": [
"overlayMode"
],
"err": false,
"errmsg": [],
"logo-align": "center",
"logoAlign": "center",
"overlayMode": "dark",
"warnmsg": []
}
},
"lowercase-declared-provided": {
"args": {
"args": {
"logoAlign": "start",
"overlayMode": "dark",
"plainkey": "value"
},
"defaulted": [
"logo-align",
"overlayMode"
],
"err": false,
"errmsg": [],
"warnmsg": []
},
"initargs": {
"default": [
"logo-align",
"overlayMode"
],
"err": false,
"errmsg": [],
"logo-align": "start",
"logoAlign": "start",
"overlayMode": "dark",
"plainkey": "value",
"warnmsg": []
}
},
"schema-camel-keys": {
"schema": {
"absent": {
"logo-align": {
"defaulted": [
"logo-align"
],
"errmsg": [],
"newmsg": [],
"value": "start",
"warnmsg": []
},
"overlayMode": {
"defaulted": [
"overlayMode"
],
"errmsg": [],
"newmsg": [],
"value": "dark",
"warnmsg": []
},
"plainkey": {
"defaulted": [],
"errmsg": [],
"newmsg": [],
"value": null,
"warnmsg": []
}
},
"err": false,
"errmsg": [],
"positions": {},
"schema": {
"logo-align": {
"accepts": [
"string"
],
"camelKey": "logoAlign",
"default": "start",
"kind": "scalar",
"name": "logo-align",
"optional": true,
"options": {
"values": [
"start",
"center",
"end"
]
},
"types": [
"select"
]
},
"overlayMode": {
"accepts": [
"string"
],
"camelKey": "overlayMode",
"default": "dark",
"kind": "scalar",
"name": "overlayMode",
"optional": true,
"options": {
"values": [
"light",
"dark",
"none"
]
},
"types": [
"select"
]
},
"plainkey": {
"accepts": [
"string"
],
"camelKey": "plainkey",
"kind": "scalar",
"name": "plainkey",
"optional": true,
"types": [
"string"
]
}
}
}
}
}