cloud-templates 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +29 -0
  3. data/.simplecov +6 -0
  4. data/Gemfile +2 -0
  5. data/LICENSE +201 -0
  6. data/NOTICE +13 -0
  7. data/README.md +124 -0
  8. data/Rakefile +27 -0
  9. data/cloud-templates.gemspec +27 -0
  10. data/examples/lib/user_directory/artifacts/catalogized.rb +11 -0
  11. data/examples/lib/user_directory/artifacts/group.rb +37 -0
  12. data/examples/lib/user_directory/artifacts/ided.rb +11 -0
  13. data/examples/lib/user_directory/artifacts/organization.rb +17 -0
  14. data/examples/lib/user_directory/artifacts/pathed.rb +22 -0
  15. data/examples/lib/user_directory/artifacts/person.rb +20 -0
  16. data/examples/lib/user_directory/artifacts/team.rb +31 -0
  17. data/examples/lib/user_directory/artifacts/unit.rb +24 -0
  18. data/examples/lib/user_directory/artifacts/user.rb +29 -0
  19. data/examples/lib/user_directory/render/etc/artifact_view.rb +15 -0
  20. data/examples/lib/user_directory/render/etc/composite_view.rb +26 -0
  21. data/examples/lib/user_directory/render/etc/group_view.rb +23 -0
  22. data/examples/lib/user_directory/render/etc/person_view.rb +19 -0
  23. data/examples/lib/user_directory/render/etc/registry.rb +33 -0
  24. data/examples/lib/user_directory/render/etc/user_view.rb +35 -0
  25. data/examples/lib/user_directory/render/etc.rb +3 -0
  26. data/examples/lib/user_directory/render/ldap/artifact_view.rb +27 -0
  27. data/examples/lib/user_directory/render/ldap/composite_view.rb +32 -0
  28. data/examples/lib/user_directory/render/ldap/group_view.rb +28 -0
  29. data/examples/lib/user_directory/render/ldap/organization_view.rb +26 -0
  30. data/examples/lib/user_directory/render/ldap/person_view.rb +39 -0
  31. data/examples/lib/user_directory/render/ldap/registry.rb +16 -0
  32. data/examples/lib/user_directory/render/ldap/unit_view.rb +26 -0
  33. data/examples/lib/user_directory/render/ldap/user_view.rb +39 -0
  34. data/examples/lib/user_directory/render/ldap.rb +3 -0
  35. data/examples/lib/user_directory/utils.rb +18 -0
  36. data/examples/lib/user_directory.rb +23 -0
  37. data/examples/lib_path.rb +2 -0
  38. data/examples/spec/spec_helper.rb +1 -0
  39. data/examples/spec/user_directory_spec.rb +568 -0
  40. data/lib/aws/templates/artifact.rb +140 -0
  41. data/lib/aws/templates/composite.rb +178 -0
  42. data/lib/aws/templates/exceptions.rb +221 -0
  43. data/lib/aws/templates/render/registry.rb +60 -0
  44. data/lib/aws/templates/render/utils/base_type_views.rb +131 -0
  45. data/lib/aws/templates/render/view.rb +127 -0
  46. data/lib/aws/templates/render.rb +72 -0
  47. data/lib/aws/templates/utils/artifact_storage.rb +141 -0
  48. data/lib/aws/templates/utils/contextualized/filters.rb +437 -0
  49. data/lib/aws/templates/utils/contextualized/hash.rb +13 -0
  50. data/lib/aws/templates/utils/contextualized/nil.rb +13 -0
  51. data/lib/aws/templates/utils/contextualized/proc.rb +13 -0
  52. data/lib/aws/templates/utils/contextualized.rb +113 -0
  53. data/lib/aws/templates/utils/default.rb +185 -0
  54. data/lib/aws/templates/utils/dependency/enumerable.rb +13 -0
  55. data/lib/aws/templates/utils/dependency/object.rb +46 -0
  56. data/lib/aws/templates/utils/dependency.rb +121 -0
  57. data/lib/aws/templates/utils/dependent.rb +28 -0
  58. data/lib/aws/templates/utils/inheritable.rb +52 -0
  59. data/lib/aws/templates/utils/late_bound.rb +89 -0
  60. data/lib/aws/templates/utils/memoized.rb +27 -0
  61. data/lib/aws/templates/utils/named.rb +19 -0
  62. data/lib/aws/templates/utils/options.rb +279 -0
  63. data/lib/aws/templates/utils/parametrized/constraints.rb +423 -0
  64. data/lib/aws/templates/utils/parametrized/getters.rb +293 -0
  65. data/lib/aws/templates/utils/parametrized/guarded.rb +32 -0
  66. data/lib/aws/templates/utils/parametrized/mapper.rb +73 -0
  67. data/lib/aws/templates/utils/parametrized/nested.rb +72 -0
  68. data/lib/aws/templates/utils/parametrized/transformations.rb +660 -0
  69. data/lib/aws/templates/utils/parametrized.rb +240 -0
  70. data/lib/aws/templates/utils.rb +219 -0
  71. data/lib/aws/templates.rb +16 -0
  72. data/spec/aws/templates/artifact_spec.rb +161 -0
  73. data/spec/aws/templates/composite_spec.rb +361 -0
  74. data/spec/aws/templates/render/utils/base_type_views_spec.rb +104 -0
  75. data/spec/aws/templates/render_spec.rb +62 -0
  76. data/spec/aws/templates/utils/as_named_spec.rb +31 -0
  77. data/spec/aws/templates/utils/contextualized/filters_spec.rb +108 -0
  78. data/spec/aws/templates/utils/contextualized_spec.rb +115 -0
  79. data/spec/aws/templates/utils/late_bound_spec.rb +52 -0
  80. data/spec/aws/templates/utils/options_spec.rb +67 -0
  81. data/spec/aws/templates/utils/parametrized/constraint_spec.rb +175 -0
  82. data/spec/aws/templates/utils/parametrized/getters_spec.rb +139 -0
  83. data/spec/aws/templates/utils/parametrized/transformation_spec.rb +314 -0
  84. data/spec/aws/templates/utils/parametrized_spec.rb +241 -0
  85. data/spec/spec_helper.rb +6 -0
  86. metadata +244 -0
@@ -0,0 +1,660 @@
1
+ require 'aws/templates/exceptions'
2
+ require 'aws/templates/utils/parametrized'
3
+ require 'aws/templates/utils/parametrized/nested'
4
+ require 'aws/templates/utils/parametrized/mapper'
5
+ require 'singleton'
6
+
7
+ module Aws
8
+ module Templates
9
+ module Utils
10
+ module Parametrized #:nodoc:
11
+ ##
12
+ # Transformation functor class
13
+ #
14
+ # A transformation is a Proc accepting input value and providing output
15
+ # value which is expected to be a transformation of the input.
16
+ # The proc is executed in instance context so instance methods can
17
+ # be used for calculation.
18
+ #
19
+ # The class implements functor pattern through to_proc method and
20
+ # closure. Essentially, all transformations can be used everywhere where
21
+ # a block is expected.
22
+ #
23
+ # It provides protected method transform which should be overriden in
24
+ # all concrete transformation classes.
25
+ class Transformation
26
+ ##
27
+ # Apply several transformation sequentially
28
+ #
29
+ # Useful when a few transformations need to be applied to a single value to get
30
+ # the final result
31
+ #
32
+ # === Example
33
+ #
34
+ # class Piece
35
+ # include Aws::Templates::Utils::Parametrized
36
+ #
37
+ # parameter :param,
38
+ # transform: as_chain(
39
+ # as_hash,
40
+ # as_object(Aws::Templates::Utils::AsNamed)
41
+ # )
42
+ # end
43
+ #
44
+ # i = Piece.new(param: [:name, 'Rex'])
45
+ # i.param.name # => 'Rex'
46
+ class AsChain < Transformation
47
+ attr_reader :components
48
+
49
+ def initialize(components)
50
+ @components = _check_components(components)
51
+ end
52
+
53
+ protected
54
+
55
+ def transform(parameter, value, instance)
56
+ return if value.nil?
57
+ components.inject(value) { |acc, elem| instance.instance_exec(parameter, acc, &elem) }
58
+ end
59
+
60
+ private
61
+
62
+ def _check_components(components)
63
+ result = components.to_a
64
+
65
+ invalid_components = result.reject { |component| component.respond_to?(:to_proc) }
66
+ raise "Invalid components: #{invalid_components}" unless invalid_components.empty?
67
+
68
+ result
69
+ end
70
+ end
71
+
72
+ ##
73
+ # Transform input value into the object
74
+ #
75
+ # Input value can be either hash or object. The transformation performs
76
+ # nested object evaluation recusrsively as the input were Parametrized
77
+ # instance. As a parameter for the transformation you can
78
+ # specify either Module which mixes in Parametrized or to use
79
+ # a block which is to be evaluated as a part of Parametrized definition
80
+ # or both.
81
+ #
82
+ # With as_object transformation you can have as many nested levels
83
+ # as it's needed.
84
+ #
85
+ # === Example
86
+ #
87
+ # class Piece
88
+ # include Aws::Templates::Utils::Parametrized
89
+ #
90
+ # parameter :param1,
91
+ # :transform => as_object(Aws::Templates::Utils::AsNamed)
92
+ # parameter :param2, :transform => as_object {
93
+ # parameter :id, :description => 'Just ID',
94
+ # :constraint => not_nil
95
+ # }
96
+ # parameter :param3,
97
+ # :transform => as_object(Aws::Templates::Utils::AsNamed) {
98
+ # parameter :path, :description => 'Just path',
99
+ # :constraint => not_nil
100
+ # }
101
+ # end
102
+ #
103
+ # i = Piece.new
104
+ # i.param1 # => nil
105
+ # i = Piece.new(:param1 => {:name => 'Zed'})
106
+ # i.param1.name # => 'Zed'
107
+ # i = Piece.new(:param2 => {:id => 123})
108
+ # i.param2.id # => 123
109
+ # i = Piece.new(:param3 => {:path => 'a/b', :name => 'Rex'})
110
+ # i.param3.path # => 'a/b'
111
+ # i.param3.name # => 123
112
+ class AsObject < Transformation
113
+ attr_reader :klass
114
+
115
+ def initialize(scope, klass = nil, &definition)
116
+ @klass = if klass.nil?
117
+ Nested.create_class(scope)
118
+ elsif klass.is_a?(Class)
119
+ klass
120
+ elsif klass.is_a?(Module)
121
+ Nested.create_class(scope).with(klass)
122
+ else
123
+ raise "#{klass} is neither a class nor a module"
124
+ end
125
+
126
+ @klass.class_eval(&definition) unless definition.nil?
127
+ end
128
+
129
+ protected
130
+
131
+ def transform(_, value, instance)
132
+ return if value.nil?
133
+ klass.new instance.root,
134
+ if Utils.hashable?(value)
135
+ value
136
+ elsif Utils.parametrized?(value)
137
+ Mapper.new(value)
138
+ else
139
+ raise "Value #{value} doesn't have parameters"
140
+ end
141
+ end
142
+ end
143
+
144
+ ##
145
+ # Transform input value into a list
146
+ #
147
+ # Input value can be either an array or something which implements
148
+ # to_a method standard semantics. Each list entry is evaluated
149
+ # with specified constraints and transformations.
150
+ #
151
+ # With as_list transformation you can have as many nested levels
152
+ # as it's needed in terms of nested lists or nested objects.
153
+ #
154
+ # === Example
155
+ #
156
+ # class Piece
157
+ # include Aws::Templates::Utils::Parametrized
158
+ #
159
+ # parameter :param1, :transform => as_list(
160
+ # # alias for all elements. Plays a role during introspection
161
+ # :name => :element,
162
+ # # description of what the element represents
163
+ # :description => 'List element',
164
+ # # constraint for list element
165
+ # :constraint => not_nil
166
+ # )
167
+ # parameter :param2, :transform => as_list(
168
+ # :name => :element,
169
+ # :description => 'List element',
170
+ # :transform => as_list( # nested list
171
+ # :name => :sub_element,
172
+ # :description => 'Sub-list element',
173
+ # :constraint => not_nil
174
+ # )
175
+ # )
176
+ # parameter :param3, :transform => as_list(
177
+ # :name => :particle,
178
+ # :description => 'Small particle',
179
+ # :transform => as_object( # nested object
180
+ # Aws::Templates::Utils::AsNamed
181
+ # )
182
+ # )
183
+ # end
184
+ #
185
+ # i = Piece.new(:param1 => [1,2,3])
186
+ # i.param1 # => [1,2,3]
187
+ # i = Piece.new(:param1 => [1,nil,3])
188
+ # i.param1 # throws exception
189
+ # i = Piece.new(:param2 => [[1],[2],[3]])
190
+ # i.param2 # => [[1],[2],[3]]
191
+ # i = Piece.new(:param2 => [1,[2],[3]])
192
+ # i.param2 # throws exception
193
+ # i = Piece.new(:param2 => [[1],[nil],[3]])
194
+ # i.param2 # throws exception
195
+ # i = Piece.new(:param3 => [{:name => 'Zed'}])
196
+ # i.param3.first.name # => 'Zed'
197
+ class AsList < Transformation
198
+ attr_reader :sub_parameter
199
+
200
+ def initialize(klass = nil, options = nil)
201
+ return if options.nil?
202
+
203
+ @sub_parameter = Parameter.new(
204
+ options[:name],
205
+ klass,
206
+ description: options[:description],
207
+ transform: options[:transform],
208
+ constraint: options[:constraint]
209
+ )
210
+ end
211
+
212
+ protected
213
+
214
+ def transform(parameter, value, instance)
215
+ return if value.nil?
216
+
217
+ unless value.respond_to?(:to_a)
218
+ raise "#{parameter.name} is assigned to " \
219
+ "#{value.inspect} which is not a list"
220
+ end
221
+
222
+ if sub_parameter
223
+ value.to_a.map { |el| sub_parameter.process_value(instance, el) }
224
+ else
225
+ value.to_a
226
+ end
227
+ end
228
+ end
229
+
230
+ ##
231
+ # Transform value with the specified render
232
+ #
233
+ # Input value can be anything which could be rendered by the
234
+ # specified render type. Returned value is rendered input.
235
+ #
236
+ # The transformation is useful when you have a document of some
237
+ # format embedded into a document of another format. An example
238
+ # could be Bash scripts embedded into AWS CFN template.
239
+ #
240
+ # === Example
241
+ #
242
+ # class Brush
243
+ # attr_reader :color
244
+ # attr_reader :thickness
245
+ # attr_reader :type
246
+ #
247
+ # def initialize(c, thick, t)
248
+ # @c = c
249
+ # @thick = thick
250
+ # @t = t
251
+ # end
252
+ # end
253
+ #
254
+ # class Circle
255
+ # attr_reader :radius
256
+ # attr_reader :brush
257
+ #
258
+ # def initialize(r, b)
259
+ # @radius = r
260
+ # @brush = b
261
+ # end
262
+ # end
263
+ #
264
+ # class Piece
265
+ # include Aws::Templates::Utils::Parametrized
266
+ #
267
+ # parameter :picture, :transform => as_rendered(
268
+ # # Render Type
269
+ # Graphics::Renders::JPEG,
270
+ # # parameter section for the render
271
+ # format: :base64
272
+ # )
273
+ # end
274
+ #
275
+ # i = Piece.new(picture: Circle.new(10, Brush.new(:red, 2, :dots)))
276
+ # i.picture # => <rendered representation>
277
+ class AsRendered < Transformation
278
+ attr_reader :type
279
+ attr_reader :parameters
280
+
281
+ def initialize(render_type, params)
282
+ @type = _check_render_type(render_type)
283
+ @parameters = params
284
+ end
285
+
286
+ protected
287
+
288
+ def transform(_, value, instance)
289
+ return if value.nil?
290
+ type.view_for(value, _compute_render_parameters(instance)).to_rendered
291
+ end
292
+
293
+ private
294
+
295
+ def _check_render_type(render_type)
296
+ unless render_type.respond_to?(:view_for)
297
+ raise(
298
+ "Wrong render type object #{params}. " \
299
+ 'The instance should have #view_for method.'
300
+ )
301
+ end
302
+
303
+ render_type
304
+ end
305
+
306
+ def _compute_render_parameters(instance)
307
+ return if parameters.nil?
308
+
309
+ if parameters.respond_to?(:to_hash)
310
+ parameters
311
+ elsif parameters.respond_to?(:to_proc)
312
+ instance.instance_exec(&parameters)
313
+ else
314
+ parameters
315
+ end
316
+ end
317
+ end
318
+
319
+ ##
320
+ # Convert input into integer
321
+ #
322
+ # Input value can be anything implementing :to_i method.
323
+ #
324
+ # === Example
325
+ #
326
+ # class Piece
327
+ # include Aws::Templates::Utils::Parametrized
328
+ #
329
+ # parameter :param, :transform => as_integer
330
+ # end
331
+ #
332
+ # i = Piece.new
333
+ # i.param # => nil
334
+ # i = Piece.new(:param => '23')
335
+ # i.param # => 23
336
+ class AsInteger < Transformation
337
+ include Singleton
338
+
339
+ protected
340
+
341
+ def transform(_, value, _)
342
+ return if value.nil?
343
+ Integer(value)
344
+ end
345
+ end
346
+
347
+ ##
348
+ # Convert input into string
349
+ #
350
+ # Input value can be anything implementing :to_s method.
351
+ #
352
+ # === Example
353
+ #
354
+ # class Piece
355
+ # include Aws::Templates::Utils::Parametrized
356
+ #
357
+ # parameter :param, :transform => as_string
358
+ # end
359
+ #
360
+ # i = Piece.new
361
+ # i.param # => nil
362
+ # i = Piece.new(:param => 23)
363
+ # i.param # => '23'
364
+ class AsString < Transformation
365
+ include Singleton
366
+
367
+ protected
368
+
369
+ def transform(_, value, _)
370
+ return if value.nil?
371
+ String(value)
372
+ end
373
+ end
374
+
375
+ ##
376
+ # Convert input into boolean
377
+ #
378
+ # Input value can be anything implementing :to_s method. Value considered false if it is:
379
+ # * +'false' as a string+
380
+ # * +FalseClass+
381
+ # Otherwise, value is true. If value is nil, it won't be replaced by "false"
382
+ #
383
+ # === Example
384
+ #
385
+ # class Piece
386
+ # include Aws::Templates::Utils::Parametrized
387
+ #
388
+ # parameter :param, :transform => as_boolean
389
+ # end
390
+ #
391
+ # i = Piece.new
392
+ # i.param # => false
393
+ # i = Piece.new(:param => 0)
394
+ # i.param # => true
395
+ class AsBoolean < Transformation
396
+ include Singleton
397
+
398
+ protected
399
+
400
+ def transform(_, value, _)
401
+ return if value.nil?
402
+ !value.to_s.casecmp('false').zero?
403
+ end
404
+ end
405
+
406
+ ##
407
+ # Convert input into hash
408
+ #
409
+ # Input value can be anything implementing :to_hash method.
410
+ #
411
+ # === Example
412
+ #
413
+ # class Piece
414
+ # include Aws::Templates::Utils::Parametrized
415
+ #
416
+ # parameter :param, :transform => as_hash
417
+ # parameter :param2,
418
+ # transform: as_hash {
419
+ # value name: :number,
420
+ # description: 'Number',
421
+ # constraint: not_nil,
422
+ # transform: as_integer
423
+ # }
424
+ # end
425
+ #
426
+ # i = Piece.new
427
+ # i.param # => nil
428
+ # i = Piece.new(:param => [[1,2]])
429
+ # i.param # => {1=>2}
430
+ # i = Piece.new(:param2 => [[1,'3']])
431
+ # i.param # => {1=>3}
432
+ class AsHash < Transformation
433
+ include Parametrized.class_scope
434
+
435
+ def key(opts)
436
+ @key_parameter = _create_parameter(opts)
437
+ end
438
+
439
+ def value(opts)
440
+ @value_parameter = _create_parameter(opts)
441
+ end
442
+
443
+ def initialize(klass = nil, &blk)
444
+ @klass = klass
445
+ instance_eval(&blk) if blk
446
+ end
447
+
448
+ protected
449
+
450
+ def transform(_, value, instance)
451
+ return if value.nil?
452
+
453
+ Hash[
454
+ Hash[value].map do |k, v|
455
+ [
456
+ _process_value(@key_parameter, instance, k),
457
+ _process_value(@value_parameter, instance, v)
458
+ ]
459
+ end
460
+ ]
461
+ end
462
+
463
+ def _process_value(parameter, instance, value)
464
+ return value if parameter.nil?
465
+ parameter.process_value(instance, value)
466
+ end
467
+
468
+ private
469
+
470
+ def _create_parameter(opts)
471
+ Parameter.new(
472
+ opts[:name],
473
+ @klass,
474
+ description: opts[:description],
475
+ transform: opts[:transform],
476
+ constraint: opts[:constraint]
477
+ )
478
+ end
479
+ end
480
+
481
+ ##
482
+ # Convert to a Ruby class
483
+ #
484
+ # The transformation allows to use elements of metaprogramming in the framework. It
485
+ # tries to transform passed value to a Ruby class.
486
+ #
487
+ # === Example
488
+ #
489
+ # class Piece
490
+ # include Aws::Templates::Utils::Parametrized
491
+ #
492
+ # parameter :param, :transform => as_module
493
+ # end
494
+ #
495
+ # i = Piece.new
496
+ # i.param # => nil
497
+ # i = Piece.new(:param => 'Object')
498
+ # i.param # => Object
499
+ class AsModule < Transformation
500
+ include Singleton
501
+
502
+ protected
503
+
504
+ def transform(_, value, _)
505
+ return if value.nil?
506
+ return value if value.is_a?(Module)
507
+ return _lookup(value.to_s) if value.respond_to?(:to_s)
508
+ raise "#{value} can't be transformed to a class"
509
+ end
510
+
511
+ private
512
+
513
+ PATH_REGEXP = Regexp.compile('::|[.]|/')
514
+
515
+ def _lookup(class_name)
516
+ target = class_name.split(PATH_REGEXP)
517
+ .inject(::Kernel) { |acc, elem| acc.const_get(elem) }
518
+
519
+ raise "#{class_name} == #{target} which is not a class" unless target.is_a?(Module)
520
+
521
+ target
522
+ end
523
+ end
524
+
525
+ ##
526
+ # Creates closure with transformation invocation
527
+ #
528
+ # It's an interface method required for Transformation to expose
529
+ # functor properties. It encloses invocation of Transformation
530
+ # transform_wrapper method into a closure. The closure itself is
531
+ # executed in the context of Parametrized instance which provides
532
+ # proper set "self" variable.
533
+ #
534
+ # The closure itself accepts 2 parameters:
535
+ # * +parameter+ - the Parameter object which the transformation
536
+ # will be performed for
537
+ # * +value+ - parameter value to be transformed
538
+ # ...where instance is assumed from self
539
+ def to_proc
540
+ transform = self
541
+
542
+ lambda do |parameter, value|
543
+ transform.transform_wrapper(parameter, value, self)
544
+ end
545
+ end
546
+
547
+ ##
548
+ # Wraps transformation-dependent method
549
+ #
550
+ # It wraps constraint-dependent "transform" method into a rescue block
551
+ # to standardize exception type and information provided by failed
552
+ # transformation calculation
553
+ # * +parameter+ - the Parameter object which the transformation will
554
+ # be performed for
555
+ # * +value+ - parameter value to be transformed
556
+ # * +instance+ - the instance value is transform
557
+ def transform_wrapper(parameter, value, instance)
558
+ transform(parameter, value, instance)
559
+ rescue StandardError
560
+ raise NestedParameterException.new(parameter)
561
+ end
562
+
563
+ protected
564
+
565
+ ##
566
+ # Transform method
567
+ #
568
+ # * +parameter+ - the Parameter object which the transformation is
569
+ # performed for
570
+ # * +value+ - parameter value to be transformed
571
+ # * +instance+ - the instance value is transform
572
+ def transform(parameter, value, instance); end
573
+ end
574
+
575
+ ##
576
+ # Syntax sugar for transformations definition
577
+ #
578
+ # It injects the methods as class-scope methods into mixing classes.
579
+ # The methods are factories to create particular type of transformation
580
+ class_scope do
581
+ ##
582
+ # Chain a few transformations into a single one
583
+ #
584
+ # alias for AsChain class
585
+ def as_chain(*components)
586
+ Transformation::AsChain.new(components)
587
+ end
588
+
589
+ ##
590
+ # Transform the value into an object
591
+ #
592
+ # alias for AsObject class
593
+ def as_object(klass = nil, &definition)
594
+ Transformation::AsObject.new(self, klass, &definition)
595
+ end
596
+
597
+ ##
598
+ # Transform the value into a list
599
+ #
600
+ # alias for AsList class
601
+ def as_list(parameters = nil)
602
+ Transformation::AsList.new(self, parameters)
603
+ end
604
+
605
+ ##
606
+ # Transform value with the specified render
607
+ #
608
+ # alias for AsRendered class
609
+ def as_rendered(render_type, params = nil, &params_block)
610
+ Transformation::AsRendered.new(render_type, params || params_block)
611
+ end
612
+
613
+ ##
614
+ # Convert input into integer
615
+ #
616
+ # alias for AsInteger class
617
+ def as_integer
618
+ Transformation::AsInteger.instance
619
+ end
620
+
621
+ ##
622
+ # Convert input into string
623
+ #
624
+ # alias for AsString class
625
+ def as_string
626
+ Transformation::AsString.instance
627
+ end
628
+
629
+ ##
630
+ # Convert input into boolean
631
+ #
632
+ # alias for AsBoolean class
633
+ def as_boolean
634
+ Transformation::AsBoolean.instance
635
+ end
636
+
637
+ ##
638
+ # Convert input into hash
639
+ #
640
+ # alias for AsHash class
641
+ def as_hash(&blk)
642
+ Transformation::AsHash.new(self, &blk)
643
+ end
644
+
645
+ ##
646
+ # Convert input into a class
647
+ #
648
+ # alias for AsModule class
649
+ def as_module
650
+ Transformation::AsModule.instance
651
+ end
652
+ end
653
+
654
+ class Nested #:nodoc:
655
+ include Parametrized
656
+ end
657
+ end
658
+ end
659
+ end
660
+ end