shale 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -16,11 +16,14 @@ module Shale
16
16
  # Convert Hash to Object using Hash/JSON/YAML/TOML mapping
17
17
  #
18
18
  # @param [Hash] hash Hash to convert
19
+ # @param [Array<Symbol>] only
20
+ # @param [Array<Symbol>] except
21
+ # @param [any] context
19
22
  #
20
- # @return [Shale::Mapper]
23
+ # @return [model instance]
21
24
  #
22
25
  # @api public
23
- def of_#{format}(hash)
26
+ def of_#{format}(hash, only: nil, except: nil, context: nil)
24
27
  instance = model.new
25
28
 
26
29
  attributes
@@ -30,25 +33,57 @@ module Shale
30
33
 
31
34
  mapping_keys = #{format}_mapping.keys
32
35
 
36
+ only = to_partial_render_attributes(only)
37
+ except = to_partial_render_attributes(except)
38
+
33
39
  hash.each do |key, value|
34
40
  mapping = mapping_keys[key]
35
41
  next unless mapping
36
42
 
37
43
  if mapping.method_from
38
- new.send(mapping.method_from, instance, value)
44
+ mapper = new
45
+
46
+ if mapper.method(mapping.method_from).arity == 3
47
+ mapper.send(mapping.method_from, instance, value, context)
48
+ else
49
+ mapper.send(mapping.method_from, instance, value)
50
+ end
39
51
  else
40
52
  attribute = attributes[mapping.attribute]
41
53
  next unless attribute
42
54
 
55
+ if only
56
+ attribute_only = only[attribute.name]
57
+ next unless only.key?(attribute.name)
58
+ end
59
+
60
+ if except
61
+ attribute_except = except[attribute.name]
62
+ next if except.key?(attribute.name) && attribute_except.nil?
63
+ end
64
+
43
65
  if value.nil?
44
66
  instance.send(attribute.setter, nil)
45
67
  elsif attribute.collection?
46
68
  [*value].each do |val|
47
- val = val ? attribute.type.of_#{format}(val) : val
69
+ if val
70
+ val = attribute.type.of_#{format}(
71
+ val,
72
+ only: attribute_only,
73
+ except: attribute_except,
74
+ context: context
75
+ )
76
+ end
77
+
48
78
  instance.send(attribute.name) << attribute.type.cast(val)
49
79
  end
50
80
  else
51
- val = attribute.type.of_#{format}(value)
81
+ val = attribute.type.of_#{format}(
82
+ value,
83
+ only: attribute_only,
84
+ except: attribute_except,
85
+ context: context
86
+ )
52
87
  instance.send(attribute.setter, attribute.type.cast(val))
53
88
  end
54
89
  end
@@ -60,13 +95,16 @@ module Shale
60
95
  # Convert Object to Hash using Hash/JSON/YAML/TOML mapping
61
96
  #
62
97
  # @param [any] instance Object to convert
98
+ # @param [Array<Symbol>] only
99
+ # @param [Array<Symbol>] except
100
+ # @param [any] context
63
101
  #
64
102
  # @raise [IncorrectModelError]
65
103
  #
66
104
  # @return [Hash]
67
105
  #
68
106
  # @api public
69
- def as_#{format}(instance)
107
+ def as_#{format}(instance, only: nil, except: nil, context: nil)
70
108
  unless instance.is_a?(model)
71
109
  msg = "argument is a '\#{instance.class}' but should be a '\#{model}'"
72
110
  raise IncorrectModelError, msg
@@ -74,23 +112,56 @@ module Shale
74
112
 
75
113
  hash = {}
76
114
 
115
+ only = to_partial_render_attributes(only)
116
+ except = to_partial_render_attributes(except)
117
+
77
118
  #{format}_mapping.keys.each_value do |mapping|
78
119
  if mapping.method_to
79
- hash[mapping.name] = new.send(mapping.method_to, instance)
120
+ mapper = new
121
+
122
+ if mapper.method(mapping.method_to).arity == 3
123
+ mapper.send(mapping.method_to, instance, hash, context)
124
+ else
125
+ mapper.send(mapping.method_to, instance, hash)
126
+ end
80
127
  else
81
128
  attribute = attributes[mapping.attribute]
82
129
  next unless attribute
83
130
 
131
+ if only
132
+ attribute_only = only[attribute.name]
133
+ next unless only.key?(attribute.name)
134
+ end
135
+
136
+ if except
137
+ attribute_except = except[attribute.name]
138
+ next if except.key?(attribute.name) && attribute_except.nil?
139
+ end
140
+
84
141
  value = instance.send(attribute.name)
85
142
 
86
143
  if value.nil?
87
- hash[mapping.name] = nil
144
+ hash[mapping.name] = nil if mapping.render_nil?
88
145
  elsif attribute.collection?
89
- hash[mapping.name] = [*value].map do |v|
90
- v ? attribute.type.as_#{format}(v) : v
146
+ hash[mapping.name] = [*value].map do |val|
147
+ if val
148
+ attribute.type.as_#{format}(
149
+ val,
150
+ only: attribute_only,
151
+ except: attribute_except,
152
+ context: context
153
+ )
154
+ else
155
+ val
156
+ end
91
157
  end
92
158
  else
93
- hash[mapping.name] = attribute.type.as_#{format}(value)
159
+ hash[mapping.name] = attribute.type.as_#{format}(
160
+ value,
161
+ only: attribute_only,
162
+ except: attribute_except,
163
+ context: context
164
+ )
94
165
  end
95
166
  end
96
167
  end
@@ -107,80 +178,123 @@ module Shale
107
178
  # Convert JSON to Object
108
179
  #
109
180
  # @param [String] json JSON to convert
181
+ # @param [Array<Symbol>] only
182
+ # @param [Array<Symbol>] except
183
+ # @param [any] context
110
184
  #
111
- # @return [Shale::Mapper]
185
+ # @return [model instance]
112
186
  #
113
187
  # @api public
114
- def from_json(json)
115
- of_json(Shale.json_adapter.load(json))
188
+ def from_json(json, only: nil, except: nil, context: nil)
189
+ of_json(
190
+ Shale.json_adapter.load(json),
191
+ only: only,
192
+ except: except,
193
+ context: context
194
+ )
116
195
  end
117
196
 
118
197
  # Convert Object to JSON
119
198
  #
120
- # @param [Shale::Mapper] instance Object to convert
121
- # @param [Array<Symbol>] options
199
+ # @param [model instance] instance Object to convert
200
+ # @param [Array<Symbol>] only
201
+ # @param [Array<Symbol>] except
202
+ # @param [any] context
203
+ # @param [true, false] pretty
122
204
  #
123
205
  # @return [String]
124
206
  #
125
207
  # @api public
126
- def to_json(instance, *options)
127
- Shale.json_adapter.dump(as_json(instance), *options)
208
+ def to_json(instance, only: nil, except: nil, context: nil, pretty: false)
209
+ Shale.json_adapter.dump(
210
+ as_json(instance, only: only, except: except, context: context),
211
+ pretty: pretty
212
+ )
128
213
  end
129
214
 
130
215
  # Convert YAML to Object
131
216
  #
132
217
  # @param [String] yaml YAML to convert
218
+ # @param [Array<Symbol>] only
219
+ # @param [Array<Symbol>] except
220
+ # @param [any] context
133
221
  #
134
- # @return [Shale::Mapper]
222
+ # @return [model instance]
135
223
  #
136
224
  # @api public
137
- def from_yaml(yaml)
138
- of_yaml(Shale.yaml_adapter.load(yaml))
225
+ def from_yaml(yaml, only: nil, except: nil, context: nil)
226
+ of_yaml(
227
+ Shale.yaml_adapter.load(yaml),
228
+ only: only,
229
+ except: except,
230
+ context: context
231
+ )
139
232
  end
140
233
 
141
234
  # Convert Object to YAML
142
235
  #
143
- # @param [Shale::Mapper] instance Object to convert
236
+ # @param [model instance] instance Object to convert
237
+ # @param [Array<Symbol>] only
238
+ # @param [Array<Symbol>] except
239
+ # @param [any] context
144
240
  #
145
241
  # @return [String]
146
242
  #
147
243
  # @api public
148
- def to_yaml(instance)
149
- Shale.yaml_adapter.dump(as_yaml(instance))
244
+ def to_yaml(instance, only: nil, except: nil, context: nil)
245
+ Shale.yaml_adapter.dump(
246
+ as_yaml(instance, only: only, except: except, context: context)
247
+ )
150
248
  end
151
249
 
152
250
  # Convert TOML to Object
153
251
  #
154
252
  # @param [String] toml TOML to convert
253
+ # @param [Array<Symbol>] only
254
+ # @param [Array<Symbol>] except
255
+ # @param [any] context
155
256
  #
156
- # @return [Shale::Mapper]
257
+ # @return [model instance]
157
258
  #
158
259
  # @api public
159
- def from_toml(toml)
260
+ def from_toml(toml, only: nil, except: nil, context: nil)
160
261
  validate_toml_adapter
161
- of_toml(Shale.toml_adapter.load(toml))
262
+ of_toml(
263
+ Shale.toml_adapter.load(toml),
264
+ only: only,
265
+ except: except,
266
+ context: context
267
+ )
162
268
  end
163
269
 
164
270
  # Convert Object to TOML
165
271
  #
166
- # @param [Shale::Mapper] instance Object to convert
272
+ # @param [model instance] instance Object to convert
273
+ # @param [Array<Symbol>] only
274
+ # @param [Array<Symbol>] except
275
+ # @param [any] context
167
276
  #
168
277
  # @return [String]
169
278
  #
170
279
  # @api public
171
- def to_toml(instance)
280
+ def to_toml(instance, only: nil, except: nil, context: nil)
172
281
  validate_toml_adapter
173
- Shale.toml_adapter.dump(as_toml(instance))
282
+ Shale.toml_adapter.dump(
283
+ as_toml(instance, only: only, except: except, context: context)
284
+ )
174
285
  end
175
286
 
176
287
  # Convert XML document to Object
177
288
  #
178
- # @param [Shale::Adapter::<XML adapter>::Node] xml XML to convert
289
+ # @param [Shale::Adapter::<XML adapter>::Node] element
290
+ # @param [Array<Symbol>] only
291
+ # @param [Array<Symbol>] except
292
+ # @param [any] context
179
293
  #
180
- # @return [Shale::Mapper]
294
+ # @return [model instance]
181
295
  #
182
296
  # @api public
183
- def of_xml(element)
297
+ def of_xml(element, only: nil, except: nil, context: nil)
184
298
  instance = model.new
185
299
 
186
300
  attributes
@@ -188,16 +302,28 @@ module Shale
188
302
  .select { |attr| attr.default }
189
303
  .each { |attr| instance.send(attr.setter, attr.default.call) }
190
304
 
305
+ only = to_partial_render_attributes(only)
306
+ except = to_partial_render_attributes(except)
307
+
191
308
  element.attributes.each do |key, value|
192
309
  mapping = xml_mapping.attributes[key.to_s]
193
310
  next unless mapping
194
311
 
195
312
  if mapping.method_from
196
- new.send(mapping.method_from, instance, value)
313
+ mapper = new
314
+
315
+ if mapper.method(mapping.method_from).arity == 3
316
+ mapper.send(mapping.method_from, instance, value, context)
317
+ else
318
+ mapper.send(mapping.method_from, instance, value)
319
+ end
197
320
  else
198
321
  attribute = attributes[mapping.attribute]
199
322
  next unless attribute
200
323
 
324
+ next if only && !only.key?(attribute.name)
325
+ next if except&.key?(attribute.name)
326
+
201
327
  if attribute.collection?
202
328
  instance.send(attribute.name) << attribute.type.cast(value)
203
329
  else
@@ -210,13 +336,28 @@ module Shale
210
336
 
211
337
  if content_mapping
212
338
  if content_mapping.method_from
213
- new.send(content_mapping.method_from, instance, element)
339
+ mapper = new
340
+
341
+ if mapper.method(content_mapping.method_from).arity == 3
342
+ mapper.send(content_mapping.method_from, instance, element, context)
343
+ else
344
+ mapper.send(content_mapping.method_from, instance, element)
345
+ end
214
346
  else
215
347
  attribute = attributes[content_mapping.attribute]
216
348
 
217
349
  if attribute
218
- value = attribute.type.of_xml(element)
219
- instance.send(attribute.setter, attribute.type.cast(value))
350
+ skip = false
351
+
352
+ # rubocop:disable Metrics/BlockNesting
353
+ skip = true if only && !only.key?(attribute.name)
354
+ skip = true if except&.key?(attribute.name)
355
+
356
+ unless skip
357
+ value = attribute.type.of_xml(element)
358
+ instance.send(attribute.setter, attribute.type.cast(value))
359
+ end
360
+ # rubocop:enable Metrics/BlockNesting
220
361
  end
221
362
  end
222
363
  end
@@ -226,12 +367,33 @@ module Shale
226
367
  next unless mapping
227
368
 
228
369
  if mapping.method_from
229
- new.send(mapping.method_from, instance, node)
370
+ mapper = new
371
+
372
+ if mapper.method(mapping.method_from).arity == 3
373
+ mapper.send(mapping.method_from, instance, node, context)
374
+ else
375
+ mapper.send(mapping.method_from, instance, node)
376
+ end
230
377
  else
231
378
  attribute = attributes[mapping.attribute]
232
379
  next unless attribute
233
380
 
234
- value = attribute.type.of_xml(node)
381
+ if only
382
+ attribute_only = only[attribute.name]
383
+ next unless only.key?(attribute.name)
384
+ end
385
+
386
+ if except
387
+ attribute_except = except[attribute.name]
388
+ next if except.key?(attribute.name) && attribute_except.nil?
389
+ end
390
+
391
+ value = attribute.type.of_xml(
392
+ node,
393
+ only: attribute_only,
394
+ except: attribute_except,
395
+ context: context
396
+ )
235
397
 
236
398
  if attribute.collection?
237
399
  instance.send(attribute.name) << attribute.type.cast(value)
@@ -247,15 +409,23 @@ module Shale
247
409
  # Convert XML to Object
248
410
  #
249
411
  # @param [String] xml XML to convert
412
+ # @param [Array<Symbol>] only
413
+ # @param [Array<Symbol>] except
414
+ # @param [any] context
250
415
  #
251
416
  # @raise [AdapterError]
252
417
  #
253
- # @return [Shale::Mapper]
418
+ # @return [model instance]
254
419
  #
255
420
  # @api public
256
- def from_xml(xml)
421
+ def from_xml(xml, only: nil, except: nil, context: nil)
257
422
  validate_xml_adapter
258
- of_xml(Shale.xml_adapter.load(xml))
423
+ of_xml(
424
+ Shale.xml_adapter.load(xml),
425
+ only: only,
426
+ except: except,
427
+ context: context
428
+ )
259
429
  end
260
430
 
261
431
  # Convert Object to XML document
@@ -263,13 +433,24 @@ module Shale
263
433
  # @param [any] instance Object to convert
264
434
  # @param [String, nil] node_name XML node name
265
435
  # @param [Shale::Adapter::<xml adapter>::Document, nil] doc Object to convert
436
+ # @param [Array<Symbol>] only
437
+ # @param [Array<Symbol>] except
438
+ # @param [any] context
266
439
  #
267
440
  # @raise [IncorrectModelError]
268
441
  #
269
442
  # @return [::REXML::Document, ::Nokogiri::Document, ::Ox::Document]
270
443
  #
271
444
  # @api public
272
- def as_xml(instance, node_name = nil, doc = nil, _cdata = nil)
445
+ def as_xml(
446
+ instance,
447
+ node_name = nil,
448
+ doc = nil,
449
+ _cdata = nil,
450
+ only: nil,
451
+ except: nil,
452
+ context: nil
453
+ )
273
454
  unless instance.is_a?(model)
274
455
  msg = "argument is a '#{instance.class}' but should be a '#{model}'"
275
456
  raise IncorrectModelError, msg
@@ -277,7 +458,17 @@ module Shale
277
458
 
278
459
  unless doc
279
460
  doc = Shale.xml_adapter.create_document
280
- doc.add_element(doc.doc, as_xml(instance, xml_mapping.prefixed_root, doc))
461
+
462
+ element = as_xml(
463
+ instance,
464
+ xml_mapping.prefixed_root,
465
+ doc,
466
+ only: only,
467
+ except: except,
468
+ context: context
469
+ )
470
+ doc.add_element(doc.doc, element)
471
+
281
472
  return doc.doc
282
473
  end
283
474
 
@@ -288,18 +479,31 @@ module Shale
288
479
  xml_mapping.default_namespace.name
289
480
  )
290
481
 
482
+ only = to_partial_render_attributes(only)
483
+ except = to_partial_render_attributes(except)
484
+
291
485
  xml_mapping.attributes.each_value do |mapping|
292
486
  if mapping.method_to
293
- new.send(mapping.method_to, instance, element, doc)
487
+ mapper = new
488
+
489
+ if mapper.method(mapping.method_to).arity == 4
490
+ mapper.send(mapping.method_to, instance, element, doc, context)
491
+ else
492
+ mapper.send(mapping.method_to, instance, element, doc)
493
+ end
294
494
  else
295
495
  attribute = attributes[mapping.attribute]
296
496
  next unless attribute
297
497
 
498
+ next if only && !only.key?(attribute.name)
499
+ next if except&.key?(attribute.name)
500
+
298
501
  value = instance.send(attribute.name)
299
- next if value.nil?
300
502
 
301
- doc.add_namespace(mapping.namespace.prefix, mapping.namespace.name)
302
- doc.add_attribute(element, mapping.prefixed_name, value)
503
+ if mapping.render_nil? || !value.nil?
504
+ doc.add_namespace(mapping.namespace.prefix, mapping.namespace.name)
505
+ doc.add_attribute(element, mapping.prefixed_name, value)
506
+ end
303
507
  end
304
508
  end
305
509
 
@@ -307,18 +511,31 @@ module Shale
307
511
 
308
512
  if content_mapping
309
513
  if content_mapping.method_to
310
- new.send(content_mapping.method_to, instance, element, doc)
514
+ mapper = new
515
+
516
+ if mapper.method(content_mapping.method_to).arity == 4
517
+ mapper.send(content_mapping.method_to, instance, element, doc, context)
518
+ else
519
+ mapper.send(content_mapping.method_to, instance, element, doc)
520
+ end
311
521
  else
312
522
  attribute = attributes[content_mapping.attribute]
313
523
 
314
524
  if attribute
315
- value = instance.send(attribute.name)
525
+ skip = false
316
526
 
317
527
  # rubocop:disable Metrics/BlockNesting
318
- if content_mapping.cdata
319
- doc.create_cdata(value.to_s, element)
320
- else
321
- doc.add_text(element, value.to_s)
528
+ skip = true if only && !only.key?(attribute.name)
529
+ skip = true if except&.key?(attribute.name)
530
+
531
+ unless skip
532
+ value = instance.send(attribute.name)
533
+
534
+ if content_mapping.cdata
535
+ doc.create_cdata(value.to_s, element)
536
+ else
537
+ doc.add_text(element, value.to_s)
538
+ end
322
539
  end
323
540
  # rubocop:enable Metrics/BlockNesting
324
541
  end
@@ -327,24 +544,62 @@ module Shale
327
544
 
328
545
  xml_mapping.elements.each_value do |mapping|
329
546
  if mapping.method_to
330
- new.send(mapping.method_to, instance, element, doc)
547
+ mapper = new
548
+
549
+ if mapper.method(mapping.method_to).arity == 4
550
+ mapper.send(mapping.method_to, instance, element, doc, context)
551
+ else
552
+ mapper.send(mapping.method_to, instance, element, doc)
553
+ end
331
554
  else
332
555
  attribute = attributes[mapping.attribute]
333
556
  next unless attribute
334
557
 
558
+ if only
559
+ attribute_only = only[attribute.name]
560
+ next unless only.key?(attribute.name)
561
+ end
562
+
563
+ if except
564
+ attribute_except = except[attribute.name]
565
+ next if except.key?(attribute.name) && attribute_except.nil?
566
+ end
567
+
335
568
  value = instance.send(attribute.name)
336
- next if value.nil?
337
569
 
338
- doc.add_namespace(mapping.namespace.prefix, mapping.namespace.name)
570
+ if mapping.render_nil? || !value.nil?
571
+ doc.add_namespace(mapping.namespace.prefix, mapping.namespace.name)
572
+ end
339
573
 
340
- if attribute.collection?
574
+ if value.nil?
575
+ if mapping.render_nil?
576
+ child = doc.create_element(mapping.prefixed_name)
577
+ doc.add_element(element, child)
578
+ end
579
+ elsif attribute.collection?
341
580
  [*value].each do |v|
342
581
  next if v.nil?
343
- child = attribute.type.as_xml(v, mapping.prefixed_name, doc, mapping.cdata)
582
+ child = attribute.type.as_xml(
583
+ v,
584
+ mapping.prefixed_name,
585
+ doc,
586
+ mapping.cdata,
587
+ only: attribute_only,
588
+ except: attribute_except,
589
+ context: context
590
+ )
344
591
  doc.add_element(element, child)
345
592
  end
346
593
  else
347
- child = attribute.type.as_xml(value, mapping.prefixed_name, doc, mapping.cdata)
594
+ child = attribute.type.as_xml(
595
+ value,
596
+ mapping.prefixed_name,
597
+ doc,
598
+ mapping.cdata,
599
+ only: attribute_only,
600
+ except: attribute_except,
601
+ context: context
602
+ )
348
603
  doc.add_element(element, child)
349
604
  end
350
605
  end
@@ -355,17 +610,32 @@ module Shale
355
610
 
356
611
  # Convert Object to XML
357
612
  #
358
- # @param [Shale::Mapper] instance Object to convert
359
- # @param [Array<Symbol>] options
613
+ # @param [model instance] instance Object to convert
614
+ # @param [Array<Symbol>] only
615
+ # @param [Array<Symbol>] except
616
+ # @param [any] context
617
+ # @param [true, false] pretty
618
+ # @param [true, false] declaration
360
619
  #
361
620
  # @raise [AdapterError]
362
621
  #
363
622
  # @return [String]
364
623
  #
365
624
  # @api public
366
- def to_xml(instance, *options)
625
+ def to_xml(
626
+ instance,
627
+ only: nil,
628
+ except: nil,
629
+ context: nil,
630
+ pretty: false,
631
+ declaration: false
632
+ )
367
633
  validate_xml_adapter
368
- Shale.xml_adapter.dump(as_xml(instance), *options)
634
+ Shale.xml_adapter.dump(
635
+ as_xml(instance, only: only, except: except, context: context),
636
+ pretty: pretty,
637
+ declaration: declaration
638
+ )
369
639
  end
370
640
 
371
641
  private
@@ -387,55 +657,106 @@ module Shale
387
657
  def validate_xml_adapter
388
658
  raise AdapterError, XML_ADAPTER_NOT_SET_MESSAGE unless Shale.xml_adapter
389
659
  end
660
+
661
+ # Convert array with attributes to a hash
662
+ #
663
+ # @param [Array] ary
664
+ #
665
+ # @return [Hash, nil]
666
+ #
667
+ # @api private
668
+ def to_partial_render_attributes(ary)
669
+ return unless ary
670
+
671
+ ary.each_with_object([]) do |e, obj|
672
+ if e.is_a?(Hash)
673
+ obj.push(*e.to_a)
674
+ else
675
+ obj.push([e, nil])
676
+ end
677
+ end.to_h
678
+ end
390
679
  end
391
680
 
392
681
  # Convert Object to Hash
393
682
  #
683
+ # @param [Array<Symbol>] only
684
+ # @param [Array<Symbol>] except
685
+ # @param [any] context
686
+ #
394
687
  # @return [Hash]
395
688
  #
396
689
  # @api public
397
- def to_hash
398
- self.class.to_hash(self)
690
+ def to_hash(only: nil, except: nil, context: nil)
691
+ self.class.to_hash(self, only: only, except: except, context: context)
399
692
  end
400
693
 
401
694
  # Convert Object to JSON
402
695
  #
403
- # @param [Array<Symbol>] options
696
+ # @param [Array<Symbol>] only
697
+ # @param [Array<Symbol>] except
698
+ # @param [any] context
699
+ # @param [true, false] pretty
404
700
  #
405
701
  # @return [String]
406
702
  #
407
703
  # @api public
408
- def to_json(*options)
409
- self.class.to_json(self, *options)
704
+ def to_json(only: nil, except: nil, context: nil, pretty: false)
705
+ self.class.to_json(
706
+ self,
707
+ only: only,
708
+ except: except,
709
+ context: context,
710
+ pretty: pretty
711
+ )
410
712
  end
411
713
 
412
714
  # Convert Object to YAML
413
715
  #
716
+ # @param [Array<Symbol>] only
717
+ # @param [Array<Symbol>] except
718
+ # @param [any] context
719
+ #
414
720
  # @return [String]
415
721
  #
416
722
  # @api public
417
- def to_yaml
418
- self.class.to_yaml(self)
723
+ def to_yaml(only: nil, except: nil, context: nil)
724
+ self.class.to_yaml(self, only: only, except: except, context: context)
419
725
  end
420
726
 
421
727
  # Convert Object to TOML
422
728
  #
729
+ # @param [Array<Symbol>] only
730
+ # @param [Array<Symbol>] except
731
+ # @param [any] context
732
+ #
423
733
  # @return [String]
424
734
  #
425
735
  # @api public
426
- def to_toml
427
- self.class.to_toml(self)
736
+ def to_toml(only: nil, except: nil, context: nil)
737
+ self.class.to_toml(self, only: only, except: except, context: context)
428
738
  end
429
739
 
430
740
  # Convert Object to XML
431
741
  #
432
- # @param [Array<Symbol>] options
742
+ # @param [Array<Symbol>] only
743
+ # @param [Array<Symbol>] except
744
+ # @param [any] context
745
+ # @param [true, false] pretty
746
+ # @param [true, false] declaration
433
747
  #
434
748
  # @return [String]
435
749
  #
436
750
  # @api public
437
- def to_xml(*options)
438
- self.class.to_xml(self, *options)
751
+ def to_xml(only: nil, except: nil, context: nil, pretty: false, declaration: false)
752
+ self.class.to_xml(
753
+ self,
754
+ only: only,
755
+ except: except,
756
+ context: context,
757
+ pretty: pretty,
758
+ declaration: declaration
759
+ )
439
760
  end
440
761
  end
441
762
  end