File: test-databinding.yaml

package info (click to toggle)
kwalify 0.7.2-9
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 2,352 kB
  • sloc: ruby: 8,428; xml: 170; makefile: 37; java: 36
file content (339 lines) | stat: -rw-r--r-- 8,186 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
##
## $Rev: 63 $
## $Release: 0.7.2 $
## copyright(c) 2005-2010 kuwata-lab all rights reserved.
##
---

- name:  databind1
  desc:  sequence of mapping
  schema: |
	type:  seq
	sequence:
	  - type:  map
	    class: My1::Address
	    mapping:
	     "name":  { type: str, required: yes }
	     "tel":   { type: str }
	     "email": { type: str }
	     "age":   { type: int }
	     "birth": { type: date }
	     "blood": { type: str, enum: [A, B, O, AB] }
  classdef*:
    ruby: |
        require 'kwalify/util/hashlike'
	module ::My1
	  class Address
	    include Kwalify::Util::HashLike
	    attr_accessor :name, :tel, :email, :age, :birth, :blood
	  end
	end

  data: |
	- name:	 Foo
	  tel:   012-345-7777
	  email: foo@mail.com
	  age:   15
	  birth: 1990-01-01
	  blood: A
	- name:	 Bar
	  tel:   012-345-8889
	  email: bar@mail.org
	  age:   14
	  birth: 1991-01-02
	- name:	 Foo
	  tel:   012-345-9999
	  email: baz@mail.net
	  age:   13
	  birth: 1992-01-03
	  blood: AB
  expected*:
    ruby: |
	[#<My1::Address:0x001
	  @age=15,
	  @birth=#<Date: 1990-01-01 ((2447893j,0s,0n),+0s,2299161j)>,
	  @blood="A",
	  @email="foo@mail.com",
	  @name="Foo",
	  @tel="012-345-7777">,
	 #<My1::Address:0x002
	  @age=14,
	  @birth=#<Date: 1991-01-02 ((2448259j,0s,0n),+0s,2299161j)>,
	  @email="bar@mail.org",
	  @name="Bar",
	  @tel="012-345-8889">,
	 #<My1::Address:0x003
	  @age=13,
	  @birth=#<Date: 1992-01-03 ((2448625j,0s,0n),+0s,2299161j)>,
	  @blood="AB",
	  @email="baz@mail.net",
	  @name="Foo",
	  @tel="012-345-9999">]
  locations:
	- [ "/0",        1,  3 ]
	- [ "/0/name",   1, 10 ]
	- [ "/0/tel",    2, 10 ]
	- [ "/0/email",  3, 10 ]
	- [ "/0/age",    4, 10 ]
	- [ "/0/birth",  5, 10 ]
	- [ "/0/blood",  6, 10 ]
	- [ "/1",        7,  3 ]
	- [ "/1/name",   7, 10 ]
	- [ "/1/tel",    8, 10 ]
	- [ "/1/email",  9, 10 ]
	- [ "/1/age",   10, 10 ]
	- [ "/1/birth", 11, 10 ]
	- [ "/2",       12,  3 ]
	- [ "/2/name",  12, 10 ]
	- [ "/2/tel",   13, 10 ]
	- [ "/2/email", 14, 10 ]
	- [ "/2/age",   15, 10 ]
	- [ "/2/birth", 16, 10 ]


- name:	 databind2
  desc:  recursive binding
  schema: &context_schema |
	type:  map
	class: My2::Context
	mapping:
	 "groups":
	    type:  seq
	    sequence:
	      - type:  map
	        class: My2::Group
	        mapping:
		 "name":
		    type:  str
		    required:  yes
		 "desc":
		    type:  str
		 "owner": &userschema
		    type:  map
		    class: My2::User
		    mapping:
		     "name":
		        type:  str
			required: yes
	             "desc":
		        type:  str
	             "gender":
		        type:  bool
		     "mail":
		        type:   str
		     "manager": *userschema
	 "users":
	    type: seq
	    sequence:
	      - *userschema
	
  classdef*: &context_classdef
    ruby: |
        require 'kwalify/util/hashlike'
	module ::My2
	
	  class Context
	    include Kwalify::Util::HashLike
	    attr_accessor :groups     # seq
	    attr_accessor :users      # seq
	  end
	
	  class Group
	    include Kwalify::Util::HashLike
	    attr_accessor :name       # str
	    attr_accessor :desc       # str
	    attr_accessor :owner      # map
	  end
	
	  class User
	    include Kwalify::Util::HashLike
	    attr_accessor :name       # str
	    attr_accessor :gender     # bool
	    attr_accessor :mail       # str
	    attr_accessor :desc       # str
	    attr_accessor :manager    # map
	  end
	
	end

  data: |
	groups:
	  - name:	admin
	    desc:	administrator group
	    owner: &root
	      name:	root
	      desc:	root user
	  - name:       users
	    desc:	user group
	    owner: &guest
	      name:	guest
	      desc:	guest user
	users:
	  - *root
	  - *guest
	  - &user1
	    name: user1
	  - name: user2
	    manager: *user1

  expected*:
    ruby: |
	#<My2::Context:0x001
	 @groups=
	  [#<My2::Group:0x002
	    @desc="administrator group",
	    @name="admin",
	    @owner=#<My2::User:0x003 @desc="root user", @name="root">>,
	   #<My2::Group:0x004
	    @desc="user group",
	    @name="users",
	    @owner=#<My2::User:0x005 @desc="guest user", @name="guest">>],
	 @users=
	  [#<My2::User:0x003 @desc="root user", @name="root">,
	   #<My2::User:0x005 @desc="guest user", @name="guest">,
	   #<My2::User:0x006 @name="user1">,
	   #<My2::User:0x007
	    @manager=#<My2::User:0x006 @name="user1">,
	    @name="user2">]>

  locations:
	- [ "/",                      1,  1 ]
	- [ "/groups",                2,  3 ]
	- [ "/groups/0",              2,  5 ]
	- [ "/groups/0/name",         2, 17 ]
	- [ "/groups/0/desc",         3, 17 ]
	- [ "/groups/0/owner",        4, 12 ]
	- [ "/groups/0/owner/name",   5, 17 ]
	- [ "/groups/0/owner/desc",   6, 17 ]
	- [ "/groups/1",              7,  5 ]
	- [ "/groups/1/name",         7, 17 ]
	- [ "/groups/1/desc",         8, 17 ]
	- [ "/groups/1/owner",        9, 12 ]
	- [ "/groups/1/owner/name",  10, 17 ]
	- [ "/groups/1/owner/desc",  11, 17 ]
	- [ "/users",                13,  3 ]
	- [ "/users/0",              13,  5 ]
	- [ "/users/0/name",          5, 17 ]
	- [ "/users/0/desc",          6, 17 ]
	- [ "/users/1",              14,  5 ]
	- [ "/users/1/name",         10, 17 ]
	- [ "/users/1/desc",         11, 17 ]
	- [ "/users/2",              15,  5 ]
	- [ "/users/2/name",         16, 11 ]
	- [ "/users/3",              17,  5 ]
	- [ "/users/3/name",         17, 11 ]
	- [ "/users/3/manager",      18, 14 ]
	- [ "/users/3/manager/name", 16, 11 ]


- name:	 databind3
  desc:  preceding alias
  testopts:  { preceding_alias: yes }
  schema:    *context_schema
  classdef*: *context_classdef
  data: |
	groups:
	  - name:	admin
	    desc:	administrator group
	    owner:      *root
	  - name:       users
	    desc:	user group
	    owner:      *guest
	users:
	  - &root
	    name:	root
	    desc:	root user
	  - &guest
	    name:	guest
	    desc:	guest user
	  - name:       user2
	    manager:    *user1
	  - &user1
	    name:       user1

  expected*:
    ruby: |
	#<My2::Context:0x001
	 @groups=
	  [#<My2::Group:0x002
	    @desc="administrator group",
	    @name="admin",
	    @owner=#<My2::User:0x003 @desc="root user", @name="root">>,
	   #<My2::Group:0x004
	    @desc="user group",
	    @name="users",
	    @owner=#<My2::User:0x005 @desc="guest user", @name="guest">>],
	 @users=
	  [#<My2::User:0x003 @desc="root user", @name="root">,
	   #<My2::User:0x005 @desc="guest user", @name="guest">,
	   #<My2::User:0x006
	    @manager=#<My2::User:0x007 @name="user1">,
	    @name="user2">,
	   #<My2::User:0x007 @name="user1">]>

  locations:
	- [ "/",                      1,  1 ]
	- [ "/groups",                2,  3 ]
	- [ "/groups/0",              2,  5 ]
	- [ "/groups/0/name",         2, 17 ]
	- [ "/groups/0/desc",         3, 17 ]
	- [ "/groups/0/owner",        4, 17 ]
	- [ "/groups/0/owner/name",  10, 17 ]
	- [ "/groups/0/owner/desc",  11, 17 ]
	- [ "/groups/1",              5,  5 ]
	- [ "/groups/1/name",         5, 17 ]
	- [ "/groups/1/desc",         6, 17 ]
	- [ "/groups/1/owner",        7, 17 ]
	- [ "/groups/1/owner/name",  13, 17 ]
	- [ "/groups/1/owner/desc",  14, 17 ]
	- [ "/users",                 9,  3 ]
	- [ "/users/0",               9,  5 ]
	- [ "/users/0/name",         10, 17 ]
	- [ "/users/0/desc",         11, 17 ]
	- [ "/users/1",              12,  5 ]
	- [ "/users/1/name",         13, 17 ]
	- [ "/users/1/desc",         14, 17 ]
	- [ "/users/2",              15,  5 ]
	- [ "/users/2/name",         15, 17 ]
	- [ "/users/2/manager",      16, 17 ]
	- [ "/users/2/manager/name", 18, 17 ]
	- [ "/users/3",              17,  5 ]
	- [ "/users/3/name",         18, 17 ]


- name:	 databind4
  desc:  default value
  schema: |
	type: map
	class: MyConfig
	mapping:
	 "host":  {type: str, default: localhost}
	 "port":  {type: int, default: 80}
	 "user":  {type: str, required: true}
	 "pass":  {type: str, required: true}

  classdef*:
   "ruby": |
	require 'kwalify/util/hashlike'
	class MyConfig
	  include Kwalify::Util::HashLike
	  def initialize
	    @host = 'localhost'
	    @port = 8080
	  end
	  attr_accessor :host, :port, :user, :pass
	end
   "java": |
  data: |
	#host:  localhost
	port:  8080
	user:  user1
	pass:  password1
  expected*:
   "ruby": |
	#<MyConfig:0x001
	 @host="localhost",
	 @pass="password1",
	 @port=8080,
	 @user="user1">
  locations: