github.com/upcmd/up@v0.8.1-0.20230108151705-ad8b797bf04f/tests/functests/c0099.yml (about) 1 doc_meta: | 2 folder: dvars 3 title: datatemplate 4 head: | 5 Sometime you may need to do some adhoc message transformation in an elegant way, you would like to implementate your internal code or logic based on a interface / contract rather than external direct mapping. In such a scenario, it is better we could use a mapping layer to sheld your code suffering the impact of external change. We can use datatemplate for this purpose. In datatemplate definition, you map your own data structure/object with external vars/objects, then in your rendered value, you use the reference to your own object/key/value etc to generate the value required for your own business 6 7 sections: 8 - title: Relavant 9 content: templating using datakey and datapath 10 refs: 11 - title: use datakey and datapath in templating 12 link: ../../dvars/c0096 13 14 - title: Demo 15 log: yes 16 17 goal: 18 - showcase the dvar to render value using sub element of an var rather the global var name space 19 - extension to c0082 and c0098 20 21 vars: 22 student: 23 name: Tom 24 gender: Male 25 school: Sydney Grammar 26 nsw: 27 sydney: 28 sgschool: 29 student: 30 name: Grace 31 gender: Female 32 school: MLC 33 34 tasks: 35 - 36 name: task 37 task: 38 - 39 func: cmd 40 desc: use datatemplate as datasource 41 dvars: 42 - name: student_info 43 value: 'my name is:{{.name}} and I am in {{.school}}' 44 datatemplate: | 45 name: {{.nsw.sydney.sgschool.student.name}} 46 gender: {{.nsw.sydney.sgschool.student.gender}} 47 school: {{.nsw.sydney.sgschool.student.school}} 48 flags: [vvv] 49 do: 50 - name: print 51 cmd: '{{.student_info}}' 52 53 - 54 func: cmd 55 desc: use datatemplate as datasource 56 dvars: 57 - name: student_info 58 value: 'my name is:{{.student.name}} and I am in {{.school.name}}' 59 datatemplate: | 60 student: 61 name: {{.nsw.sydney.sgschool.student.name}} 62 gender: {{.nsw.sydney.sgschool.student.gender}} 63 school: 64 name: {{.nsw.sydney.sgschool.student.school}} 65 flags: [vvv] 66 do: 67 - name: print 68 cmd: '{{.student_info}}'