virtus 0.5.5 → 1.0.0.beta3
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.
- data/.rspec +1 -1
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -8
- data/Gemfile +8 -2
- data/Gemfile.devtools +24 -30
- data/Guardfile +17 -6
- data/README.md +215 -77
- data/TODO.md +6 -0
- data/config/flay.yml +2 -2
- data/config/flog.yml +1 -1
- data/config/mutant.yml +12 -1
- data/config/reek.yml +57 -66
- data/lib/virtus.rb +126 -42
- data/lib/virtus/attribute.rb +52 -240
- data/lib/virtus/attribute/accessor.rb +91 -0
- data/lib/virtus/attribute/boolean.rb +11 -8
- data/lib/virtus/attribute/builder.rb +120 -0
- data/lib/virtus/attribute/coercer.rb +51 -0
- data/lib/virtus/attribute/coercible.rb +14 -0
- data/lib/virtus/attribute/collection.rb +44 -90
- data/lib/virtus/attribute/default_value/from_callable.rb +1 -1
- data/lib/virtus/attribute/default_value/from_clonable.rb +1 -6
- data/lib/virtus/attribute/default_value/from_symbol.rb +3 -3
- data/lib/virtus/attribute/embedded_value.rb +37 -28
- data/lib/virtus/attribute/hash.rb +69 -71
- data/lib/virtus/attribute/lazy_default.rb +18 -0
- data/lib/virtus/attribute/strict.rb +16 -0
- data/lib/virtus/attribute_set.rb +81 -9
- data/lib/virtus/class_inclusions.rb +24 -17
- data/lib/virtus/class_methods.rb +13 -31
- data/lib/virtus/configuration.rb +77 -0
- data/lib/virtus/const_missing_extensions.rb +16 -0
- data/lib/virtus/extensions.rb +86 -61
- data/lib/virtus/instance_methods.rb +107 -128
- data/lib/virtus/model.rb +68 -0
- data/lib/virtus/module_builder.rb +184 -0
- data/lib/virtus/module_extensions.rb +27 -15
- data/lib/virtus/support/equalizer.rb +2 -3
- data/lib/virtus/support/type_lookup.rb +1 -1
- data/lib/virtus/value_object.rb +24 -31
- data/lib/virtus/version.rb +1 -1
- data/spec/integration/building_module_spec.rb +68 -0
- data/spec/integration/custom_attributes_spec.rb +8 -15
- data/spec/integration/custom_collection_attributes_spec.rb +101 -0
- data/spec/integration/default_values_spec.rb +9 -2
- data/spec/integration/defining_attributes_spec.rb +2 -2
- data/spec/integration/using_modules_spec.rb +5 -3
- data/spec/shared/freeze_method_behavior.rb +2 -2
- data/spec/shared/options_class_method.rb +1 -1
- data/spec/spec_helper.rb +25 -5
- data/spec/unit/virtus/attribute/boolean/value_coerced_predicate_spec.rb +25 -0
- data/spec/unit/virtus/attribute/class_methods/build_spec.rb +115 -22
- data/spec/unit/virtus/attribute/class_methods/coerce_spec.rb +32 -0
- data/spec/unit/virtus/attribute/coerce_spec.rb +38 -21
- data/spec/unit/virtus/attribute/coercible_predicate_spec.rb +20 -0
- data/spec/unit/virtus/attribute/collection/class_methods/build_spec.rb +84 -0
- data/spec/unit/virtus/attribute/collection/coerce_spec.rb +37 -24
- data/spec/unit/virtus/attribute/custom_collection_spec.rb +23 -0
- data/spec/unit/virtus/attribute/embedded_value/class_methods/build_spec.rb +37 -0
- data/spec/unit/virtus/attribute/embedded_value/coerce_spec.rb +46 -10
- data/spec/unit/virtus/attribute/get_spec.rb +15 -63
- data/spec/unit/virtus/attribute/hash/class_methods/build_spec.rb +80 -0
- data/spec/unit/virtus/attribute/hash/coerce_spec.rb +75 -13
- data/spec/unit/virtus/attribute/lazy_predicate_spec.rb +20 -0
- data/spec/unit/virtus/attribute/set_default_value_spec.rb +74 -0
- data/spec/unit/virtus/attribute/set_spec.rb +16 -36
- data/spec/unit/virtus/attribute/value_coerced_predicate_spec.rb +19 -0
- data/spec/unit/virtus/attribute_set/append_spec.rb +3 -5
- data/spec/unit/virtus/attribute_set/define_reader_method_spec.rb +1 -1
- data/spec/unit/virtus/attribute_set/define_writer_method_spec.rb +1 -1
- data/spec/unit/virtus/attribute_set/each_spec.rb +3 -3
- data/spec/unit/virtus/attribute_set/element_reference_spec.rb +1 -1
- data/spec/unit/virtus/attribute_set/element_set_spec.rb +4 -4
- data/spec/unit/virtus/attribute_set/merge_spec.rb +10 -16
- data/spec/unit/virtus/attribute_set/reset_spec.rb +6 -10
- data/spec/unit/virtus/attribute_spec.rb +222 -0
- data/spec/unit/virtus/attributes_reader_spec.rb +41 -0
- data/spec/unit/virtus/attributes_writer_spec.rb +51 -0
- data/spec/unit/virtus/class_methods/new_spec.rb +39 -0
- data/spec/unit/virtus/config_spec.rb +13 -0
- data/spec/unit/virtus/element_reader_spec.rb +21 -0
- data/spec/unit/virtus/element_writer_spec.rb +19 -0
- data/spec/unit/virtus/freeze_spec.rb +21 -0
- data/spec/unit/virtus/model_spec.rb +134 -0
- data/spec/unit/virtus/module_spec.rb +76 -0
- data/spec/unit/virtus/set_default_attributes_spec.rb +25 -0
- data/spec/unit/virtus/value_object_spec.rb +105 -0
- data/virtus.gemspec +4 -2
- metadata +82 -191
- data/.rvmrc +0 -1
- data/TODO +0 -1
- data/config/roodi.yml +0 -17
- data/lib/virtus/attribute/array.rb +0 -24
- data/lib/virtus/attribute/class.rb +0 -21
- data/lib/virtus/attribute/date.rb +0 -34
- data/lib/virtus/attribute/date_time.rb +0 -36
- data/lib/virtus/attribute/decimal.rb +0 -21
- data/lib/virtus/attribute/embedded_value/from_open_struct.rb +0 -19
- data/lib/virtus/attribute/embedded_value/from_struct.rb +0 -19
- data/lib/virtus/attribute/float.rb +0 -30
- data/lib/virtus/attribute/integer.rb +0 -27
- data/lib/virtus/attribute/numeric.rb +0 -11
- data/lib/virtus/attribute/object.rb +0 -11
- data/lib/virtus/attribute/set.rb +0 -24
- data/lib/virtus/attribute/string.rb +0 -24
- data/lib/virtus/attribute/symbol.rb +0 -21
- data/lib/virtus/attribute/time.rb +0 -36
- data/lib/virtus/coercion.rb +0 -32
- data/lib/virtus/coercion/array.rb +0 -23
- data/lib/virtus/coercion/date.rb +0 -26
- data/lib/virtus/coercion/date_time.rb +0 -26
- data/lib/virtus/coercion/decimal.rb +0 -40
- data/lib/virtus/coercion/false_class.rb +0 -24
- data/lib/virtus/coercion/float.rb +0 -39
- data/lib/virtus/coercion/hash.rb +0 -71
- data/lib/virtus/coercion/integer.rb +0 -83
- data/lib/virtus/coercion/numeric.rb +0 -66
- data/lib/virtus/coercion/object.rb +0 -125
- data/lib/virtus/coercion/string.rb +0 -218
- data/lib/virtus/coercion/symbol.rb +0 -24
- data/lib/virtus/coercion/time.rb +0 -40
- data/lib/virtus/coercion/time_coercions.rb +0 -86
- data/lib/virtus/coercion/true_class.rb +0 -24
- data/spec/unit/virtus/attribute/array/coerce_spec.rb +0 -13
- data/spec/unit/virtus/attribute/boolean/coerce_spec.rb +0 -85
- data/spec/unit/virtus/attribute/boolean/define_reader_method_spec.rb +0 -15
- data/spec/unit/virtus/attribute/boolean/value_coerced_spec.rb +0 -97
- data/spec/unit/virtus/attribute/boolean_spec.rb +0 -19
- data/spec/unit/virtus/attribute/class/coerce_spec.rb +0 -13
- data/spec/unit/virtus/attribute/class_methods/accessor_spec.rb +0 -12
- data/spec/unit/virtus/attribute/class_methods/coercion_method_spec.rb +0 -9
- data/spec/unit/virtus/attribute/class_methods/default_spec.rb +0 -9
- data/spec/unit/virtus/attribute/class_methods/determine_type_spec.rb +0 -117
- data/spec/unit/virtus/attribute/class_methods/merge_options_spec.rb +0 -11
- data/spec/unit/virtus/attribute/class_methods/primitive_spec.rb +0 -9
- data/spec/unit/virtus/attribute/class_methods/reader_spec.rb +0 -9
- data/spec/unit/virtus/attribute/class_methods/writer_spec.rb +0 -9
- data/spec/unit/virtus/attribute/coercion_method_spec.rb +0 -12
- data/spec/unit/virtus/attribute/collection/class_methods/merge_options_spec.rb +0 -40
- data/spec/unit/virtus/attribute/collection/coerce_and_append_member_spec.rb +0 -16
- data/spec/unit/virtus/attribute/collection/member_coercion/coerce_and_append_member_spec.rb +0 -18
- data/spec/unit/virtus/attribute/collection/member_type_spec.rb +0 -17
- data/spec/unit/virtus/attribute/collection/new_collection_spec.rb +0 -9
- data/spec/unit/virtus/attribute/date/coerce_spec.rb +0 -47
- data/spec/unit/virtus/attribute/date/value_coerced_spec.rb +0 -46
- data/spec/unit/virtus/attribute/date_time/coerce_spec.rb +0 -80
- data/spec/unit/virtus/attribute/decimal/coerce_spec.rb +0 -123
- data/spec/unit/virtus/attribute/default_spec.rb +0 -28
- data/spec/unit/virtus/attribute/default_value/call_spec.rb +0 -21
- data/spec/unit/virtus/attribute/default_value/class_methods/build_spec.rb +0 -23
- data/spec/unit/virtus/attribute/default_value/class_methods/new_spec.rb +0 -21
- data/spec/unit/virtus/attribute/default_value/from_callable/call_spec.rb +0 -19
- data/spec/unit/virtus/attribute/default_value/from_callable/class_methods/handle_spec.rb +0 -17
- data/spec/unit/virtus/attribute/default_value/from_clonable/call_spec.rb +0 -20
- data/spec/unit/virtus/attribute/default_value/from_clonable/class_methods/handle_spec.rb +0 -19
- data/spec/unit/virtus/attribute/default_value/from_symbol/call_spec.rb +0 -17
- data/spec/unit/virtus/attribute/default_value/from_symbol/class_methods/handle_spec.rb +0 -17
- data/spec/unit/virtus/attribute/default_value/value_spec.rb +0 -10
- data/spec/unit/virtus/attribute/define_accessor_methods_spec.rb +0 -26
- data/spec/unit/virtus/attribute/define_reader_method_spec.rb +0 -24
- data/spec/unit/virtus/attribute/define_writer_method_spec.rb +0 -24
- data/spec/unit/virtus/attribute/embedded_value/class_methods/determine_type_spec.rb +0 -23
- data/spec/unit/virtus/attribute/embedded_value/class_methods/merge_options_spec.rb +0 -17
- data/spec/unit/virtus/attribute/embedded_value/from_open_struct/coerce_spec.rb +0 -34
- data/spec/unit/virtus/attribute/embedded_value/from_struct/coerce_spec.rb +0 -34
- data/spec/unit/virtus/attribute/float/coerce_spec.rb +0 -123
- data/spec/unit/virtus/attribute/hash/class_methods/merge_options_spec.rb +0 -33
- data/spec/unit/virtus/attribute/hash/key_type_spec.rb +0 -10
- data/spec/unit/virtus/attribute/hash/value_type_spec.rb +0 -10
- data/spec/unit/virtus/attribute/inspect_spec.rb +0 -27
- data/spec/unit/virtus/attribute/integer/coerce_spec.rb +0 -117
- data/spec/unit/virtus/attribute/name_spec.rb +0 -12
- data/spec/unit/virtus/attribute/numeric/class_methods/descendants_spec.rb +0 -15
- data/spec/unit/virtus/attribute/numeric/class_methods/max_spec.rb +0 -9
- data/spec/unit/virtus/attribute/numeric/class_methods/min_spec.rb +0 -9
- data/spec/unit/virtus/attribute/options_spec.rb +0 -14
- data/spec/unit/virtus/attribute/public_reader_spec.rb +0 -24
- data/spec/unit/virtus/attribute/public_writer_spec.rb +0 -24
- data/spec/unit/virtus/attribute/set/coerce_spec.rb +0 -13
- data/spec/unit/virtus/attribute/string/coerce_spec.rb +0 -11
- data/spec/unit/virtus/attribute/symbol/coerce_spec.rb +0 -13
- data/spec/unit/virtus/attribute/time/coerce_spec.rb +0 -67
- data/spec/unit/virtus/attribute/value_coerced_spec.rb +0 -19
- data/spec/unit/virtus/class_methods/attribute_set_spec.rb +0 -9
- data/spec/unit/virtus/class_methods/attribute_spec.rb +0 -30
- data/spec/unit/virtus/class_methods/attributes_spec.rb +0 -22
- data/spec/unit/virtus/class_methods/const_missing_spec.rb +0 -27
- data/spec/unit/virtus/class_methods/inherited_spec.rb +0 -21
- data/spec/unit/virtus/coercion/array/class_methods/to_set_spec.rb +0 -12
- data/spec/unit/virtus/coercion/class_methods/element_reference_spec.rb +0 -17
- data/spec/unit/virtus/coercion/class_methods/primitive_spec.rb +0 -13
- data/spec/unit/virtus/coercion/date/class_methods/to_date_spec.rb +0 -10
- data/spec/unit/virtus/coercion/date/class_methods/to_datetime_spec.rb +0 -30
- data/spec/unit/virtus/coercion/date/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/date/class_methods/to_time_spec.rb +0 -12
- data/spec/unit/virtus/coercion/date_time/class_methods/to_date_spec.rb +0 -30
- data/spec/unit/virtus/coercion/date_time/class_methods/to_datetime_spec.rb +0 -10
- data/spec/unit/virtus/coercion/date_time/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/date_time/class_methods/to_time_spec.rb +0 -30
- data/spec/unit/virtus/coercion/decimal/class_methods/to_decimal_spec.rb +0 -9
- data/spec/unit/virtus/coercion/decimal/class_methods/to_float_spec.rb +0 -12
- data/spec/unit/virtus/coercion/decimal/class_methods/to_integer_spec.rb +0 -12
- data/spec/unit/virtus/coercion/decimal/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/false_class/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/float/class_methods/to_decimal_spec.rb +0 -12
- data/spec/unit/virtus/coercion/float/class_methods/to_float_spec.rb +0 -9
- data/spec/unit/virtus/coercion/float/class_methods/to_integer_spec.rb +0 -12
- data/spec/unit/virtus/coercion/float/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/hash/class_methods/to_date_spec.rb +0 -38
- data/spec/unit/virtus/coercion/hash/class_methods/to_datetime_spec.rb +0 -38
- data/spec/unit/virtus/coercion/hash/class_methods/to_time_spec.rb +0 -38
- data/spec/unit/virtus/coercion/integer/class_methods/to_boolean_spec.rb +0 -25
- data/spec/unit/virtus/coercion/integer/class_methods/to_decimal_spec.rb +0 -12
- data/spec/unit/virtus/coercion/integer/class_methods/to_float_spec.rb +0 -12
- data/spec/unit/virtus/coercion/integer/class_methods/to_integer_spec.rb +0 -9
- data/spec/unit/virtus/coercion/integer/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/numeric/class_methods/to_decimal_spec.rb +0 -10
- data/spec/unit/virtus/coercion/numeric/class_methods/to_float_spec.rb +0 -10
- data/spec/unit/virtus/coercion/numeric/class_methods/to_integer_spec.rb +0 -10
- data/spec/unit/virtus/coercion/numeric/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/object/class_methods/method_missing_spec.rb +0 -33
- data/spec/unit/virtus/coercion/object/class_methods/to_array_spec.rb +0 -51
- data/spec/unit/virtus/coercion/object/class_methods/to_hash_spec.rb +0 -22
- data/spec/unit/virtus/coercion/object/class_methods/to_integer_spec.rb +0 -22
- data/spec/unit/virtus/coercion/object/class_methods/to_string_spec.rb +0 -22
- data/spec/unit/virtus/coercion/string/class_methods/to_boolean_spec.rb +0 -29
- data/spec/unit/virtus/coercion/string/class_methods/to_constant_spec.rb +0 -49
- data/spec/unit/virtus/coercion/string/class_methods/to_date_spec.rb +0 -23
- data/spec/unit/virtus/coercion/string/class_methods/to_datetime_spec.rb +0 -50
- data/spec/unit/virtus/coercion/string/class_methods/to_decimal_spec.rb +0 -47
- data/spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb +0 -57
- data/spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb +0 -68
- data/spec/unit/virtus/coercion/string/class_methods/to_symbol_spec.rb +0 -9
- data/spec/unit/virtus/coercion/string/class_methods/to_time_spec.rb +0 -50
- data/spec/unit/virtus/coercion/symbol/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/coercion/time/class_methods/to_integer_spec.rb +0 -10
- data/spec/unit/virtus/coercion/time/class_methods/to_time_spec.rb +0 -10
- data/spec/unit/virtus/coercion/time_coercions/to_date_spec.rb +0 -33
- data/spec/unit/virtus/coercion/time_coercions/to_datetime_spec.rb +0 -33
- data/spec/unit/virtus/coercion/time_coercions/to_string_spec.rb +0 -18
- data/spec/unit/virtus/coercion/time_coercions/to_time_spec.rb +0 -33
- data/spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb +0 -12
- data/spec/unit/virtus/equalizer/append_spec.rb +0 -82
- data/spec/unit/virtus/equalizer/class_method/new_spec.rb +0 -111
- data/spec/unit/virtus/equalizer/methods/eql_spec.rb +0 -47
- data/spec/unit/virtus/equalizer/methods/equal_value_spec.rb +0 -57
- data/spec/unit/virtus/extensions/allowed_writer_methods_spec.rb +0 -25
- data/spec/unit/virtus/extensions/attribute_spec.rb +0 -26
- data/spec/unit/virtus/instance_methods/attributes_spec.rb +0 -140
- data/spec/unit/virtus/instance_methods/element_reference_spec.rb +0 -24
- data/spec/unit/virtus/instance_methods/element_set_spec.rb +0 -28
- data/spec/unit/virtus/instance_methods/freeze_spec.rb +0 -64
- data/spec/unit/virtus/instance_methods/initialize_spec.rb +0 -48
- data/spec/unit/virtus/instance_methods/to_hash_spec.rb +0 -23
- data/spec/unit/virtus/module_extensions/attribute_spec.rb +0 -31
- data/spec/unit/virtus/options/accept_options_spec.rb +0 -37
- data/spec/unit/virtus/options/accepted_options_spec.rb +0 -21
- data/spec/unit/virtus/options/options_spec.rb +0 -34
- data/spec/unit/virtus/type_lookup/class_methods/extended_spec.rb +0 -9
- data/spec/unit/virtus/type_lookup/determine_type_spec.rb +0 -81
- data/spec/unit/virtus/type_lookup/primitive_spec.rb +0 -9
- data/spec/unit/virtus/value_object/class_methods/allowed_writer_methods_spec.rb +0 -15
- data/spec/unit/virtus/value_object/class_methods/attribute_spec.rb +0 -50
- data/spec/unit/virtus/value_object/class_methods/equalizer_spec.rb +0 -24
- data/spec/unit/virtus/value_object/initialize_spec.rb +0 -19
- data/spec/unit/virtus/value_object/instance_methods/clone_spec.rb +0 -21
- data/spec/unit/virtus/value_object/instance_methods/with_spec.rb +0 -31
data/lib/virtus/coercion/date.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce Date values
|
5
|
-
class Date < Object
|
6
|
-
extend TimeCoercions
|
7
|
-
|
8
|
-
primitive ::Date
|
9
|
-
|
10
|
-
# Passthrough the value
|
11
|
-
#
|
12
|
-
# @example
|
13
|
-
# Virtus::Coercion::DateTime.to_date(date) # => Date object
|
14
|
-
#
|
15
|
-
# @param [DateTime] value
|
16
|
-
#
|
17
|
-
# @return [Date]
|
18
|
-
#
|
19
|
-
# @api public
|
20
|
-
def self.to_date(value)
|
21
|
-
value
|
22
|
-
end
|
23
|
-
|
24
|
-
end # class Date
|
25
|
-
end # class Coercion
|
26
|
-
end # module Virtus
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce DateTime values
|
5
|
-
class DateTime < Object
|
6
|
-
primitive ::DateTime
|
7
|
-
|
8
|
-
extend TimeCoercions
|
9
|
-
|
10
|
-
# Passthrough the value
|
11
|
-
#
|
12
|
-
# @example
|
13
|
-
# Virtus::Coercion::DateTime.to_datetime(datetime) # => DateTime object
|
14
|
-
#
|
15
|
-
# @param [DateTime] value
|
16
|
-
#
|
17
|
-
# @return [Date]
|
18
|
-
#
|
19
|
-
# @api public
|
20
|
-
def self.to_datetime(value)
|
21
|
-
value
|
22
|
-
end
|
23
|
-
|
24
|
-
end # class DateTime
|
25
|
-
end # class Coercion
|
26
|
-
end # module Virtus
|
@@ -1,40 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce BigDecimal values
|
5
|
-
class Decimal < Numeric
|
6
|
-
primitive ::BigDecimal
|
7
|
-
|
8
|
-
FLOAT_FORMAT = 'F'.freeze
|
9
|
-
|
10
|
-
# Coerce given value to String
|
11
|
-
#
|
12
|
-
# @example
|
13
|
-
# Virtus::Coercion::BigDecimal.to_string(BigDecimal('1.0')) # => "1.0"
|
14
|
-
#
|
15
|
-
# @param [BigDecimal] value
|
16
|
-
#
|
17
|
-
# @return [String]
|
18
|
-
#
|
19
|
-
# @api public
|
20
|
-
def self.to_string(value)
|
21
|
-
value.to_s(FLOAT_FORMAT)
|
22
|
-
end
|
23
|
-
|
24
|
-
# Passthrough the value
|
25
|
-
#
|
26
|
-
# @example
|
27
|
-
# Virtus::Coercion::BigDecimal.to_decimal(BigDecimal('1.0')) # => BigDecimal('1.0')
|
28
|
-
#
|
29
|
-
# @param [BigDecimal] value
|
30
|
-
#
|
31
|
-
# @return [Fixnum]
|
32
|
-
#
|
33
|
-
# @api public
|
34
|
-
def self.to_decimal(value)
|
35
|
-
value
|
36
|
-
end
|
37
|
-
|
38
|
-
end # class BigDecimal
|
39
|
-
end # class Coercion
|
40
|
-
end # module Virtus
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce false values
|
5
|
-
class FalseClass < Object
|
6
|
-
primitive ::FalseClass
|
7
|
-
|
8
|
-
# Coerce given value to String
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# Virtus::Coercion::FalseClass.to_string(false) # => "false"
|
12
|
-
#
|
13
|
-
# @param [FalseClass] value
|
14
|
-
#
|
15
|
-
# @return [String]
|
16
|
-
#
|
17
|
-
# @api public
|
18
|
-
def self.to_string(value)
|
19
|
-
value.to_s
|
20
|
-
end
|
21
|
-
|
22
|
-
end # class FalseClass
|
23
|
-
end # class Coercion
|
24
|
-
end # module Virtus
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce Float values
|
5
|
-
class Float < Numeric
|
6
|
-
primitive ::Float
|
7
|
-
|
8
|
-
# Passthrough the value
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# Virtus::Coercion::Float.to_float(1.0) # => 1.0
|
12
|
-
#
|
13
|
-
# @param [Float] value
|
14
|
-
#
|
15
|
-
# @return [Integer]
|
16
|
-
#
|
17
|
-
# @api public
|
18
|
-
def self.to_float(value)
|
19
|
-
value
|
20
|
-
end
|
21
|
-
|
22
|
-
# Coerce given value to a DateTime
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
# datetime = Virtus::Coercion::Float.to_datetime(1000000000.999) # => Sun, 09 Sep 2001 01:46:40 +0000
|
26
|
-
# datetime.to_f # => 1000000000.999
|
27
|
-
#
|
28
|
-
# @param [Float] value
|
29
|
-
#
|
30
|
-
# @return [DateTime]
|
31
|
-
#
|
32
|
-
# @api public
|
33
|
-
def self.to_datetime(value)
|
34
|
-
::DateTime.strptime((value * 10**3).to_s, "%Q")
|
35
|
-
end
|
36
|
-
|
37
|
-
end # class Float
|
38
|
-
end # class Coercion
|
39
|
-
end # module Virtus
|
data/lib/virtus/coercion/hash.rb
DELETED
@@ -1,71 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce Hash values
|
5
|
-
class Hash < Object
|
6
|
-
primitive ::Hash
|
7
|
-
|
8
|
-
TIME_SEGMENTS = [ :year, :month, :day, :hour, :min, :sec ].freeze
|
9
|
-
|
10
|
-
# Creates a Time instance from a Hash
|
11
|
-
#
|
12
|
-
# Valid keys are: :year, :month, :day, :hour, :min, :sec
|
13
|
-
#
|
14
|
-
# @param [Hash] value
|
15
|
-
#
|
16
|
-
# @return [Time]
|
17
|
-
#
|
18
|
-
# @api private
|
19
|
-
def self.to_time(value)
|
20
|
-
::Time.local(*extract(value))
|
21
|
-
end
|
22
|
-
|
23
|
-
# Creates a Date instance from a Hash
|
24
|
-
#
|
25
|
-
# Valid keys are: :year, :month, :day, :hour
|
26
|
-
#
|
27
|
-
# @param [Hash] value
|
28
|
-
#
|
29
|
-
# @return [Date]
|
30
|
-
#
|
31
|
-
# @api private
|
32
|
-
def self.to_date(value)
|
33
|
-
::Date.new(*extract(value).first(3))
|
34
|
-
end
|
35
|
-
|
36
|
-
# Creates a DateTime instance from a Hash
|
37
|
-
#
|
38
|
-
# Valid keys are: :year, :month, :day, :hour, :min, :sec
|
39
|
-
#
|
40
|
-
# @param [Hash] value
|
41
|
-
#
|
42
|
-
# @return [DateTime]
|
43
|
-
#
|
44
|
-
# @api private
|
45
|
-
def self.to_datetime(value)
|
46
|
-
::DateTime.new(*extract(value))
|
47
|
-
end
|
48
|
-
|
49
|
-
# Extracts the given args from a Hash
|
50
|
-
#
|
51
|
-
# If a value does not exist, it uses the value of Time.now
|
52
|
-
#
|
53
|
-
# @param [Hash] value
|
54
|
-
#
|
55
|
-
# @return [Array]
|
56
|
-
#
|
57
|
-
# @api private
|
58
|
-
def self.extract(value)
|
59
|
-
now = ::Time.now
|
60
|
-
|
61
|
-
TIME_SEGMENTS.map do |segment|
|
62
|
-
val = value.fetch(segment, now.public_send(segment))
|
63
|
-
Coercion[val.class.name].to_integer(val)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
private_class_method :extract
|
68
|
-
|
69
|
-
end # class Hash
|
70
|
-
end # class Coercion
|
71
|
-
end # module Virtus
|
@@ -1,83 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce Fixnum values
|
5
|
-
class Integer < Numeric
|
6
|
-
primitive ::Integer
|
7
|
-
|
8
|
-
# Coerce given value to String
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# Virtus::Coercion::Fixnum.to_string(1) # => "1"
|
12
|
-
#
|
13
|
-
# @param [Fixnum] value
|
14
|
-
#
|
15
|
-
# @return [String]
|
16
|
-
#
|
17
|
-
# @api public
|
18
|
-
def self.to_string(value)
|
19
|
-
value.to_s
|
20
|
-
end
|
21
|
-
|
22
|
-
# Passthrough the value
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
# Virtus::Coercion::Fixnum.to_integer(1) # => 1
|
26
|
-
#
|
27
|
-
# @param [Fixnum] value
|
28
|
-
#
|
29
|
-
# @return [Float]
|
30
|
-
#
|
31
|
-
# @api public
|
32
|
-
def self.to_integer(value)
|
33
|
-
value
|
34
|
-
end
|
35
|
-
|
36
|
-
# Coerce given value to a Boolean
|
37
|
-
#
|
38
|
-
# @example with a 1
|
39
|
-
# Virtus::Coercion::Fixnum.to_boolean(1) # => true
|
40
|
-
#
|
41
|
-
# @example with a 0
|
42
|
-
# Virtus::Coercion::Fixnum.to_boolean(0) # => false
|
43
|
-
#
|
44
|
-
# @param [Fixnum] value
|
45
|
-
#
|
46
|
-
# @return [BigDecimal]
|
47
|
-
#
|
48
|
-
# @api public
|
49
|
-
def self.to_boolean(value)
|
50
|
-
case value
|
51
|
-
when 1 then true
|
52
|
-
when 0 then false
|
53
|
-
else
|
54
|
-
value
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# Coerce given value to a DateTime
|
59
|
-
#
|
60
|
-
# @example
|
61
|
-
# Virtus::Coercion::Fixnum.to_datetime(0) # => Thu, 01 Jan 1970 00:00:00 +0000
|
62
|
-
#
|
63
|
-
# @param [Integer] value
|
64
|
-
#
|
65
|
-
# @return [DateTime]
|
66
|
-
#
|
67
|
-
# @api public
|
68
|
-
def self.to_datetime(value)
|
69
|
-
# FIXME: Remove after Rubinius 2.0 is released
|
70
|
-
if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
|
71
|
-
datetime_format = '%Q'
|
72
|
-
value = "#{value * 10**3}"
|
73
|
-
else
|
74
|
-
datetime_format = '%s'
|
75
|
-
value = "#{value}"
|
76
|
-
end
|
77
|
-
|
78
|
-
::DateTime.strptime(value, datetime_format)
|
79
|
-
end
|
80
|
-
|
81
|
-
end # class Fixnum
|
82
|
-
end # class Coercion
|
83
|
-
end # module Virtus
|
@@ -1,66 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Base class for all numeric Coercion classes
|
5
|
-
class Numeric < Object
|
6
|
-
primitive ::Numeric
|
7
|
-
|
8
|
-
# Coerce given value to String
|
9
|
-
#
|
10
|
-
# @example
|
11
|
-
# Virtus::Coercion::Numeric.to_string(Rational(2, 2)) # => "1.0"
|
12
|
-
#
|
13
|
-
# @param [Numeric] value
|
14
|
-
#
|
15
|
-
# @return [String]
|
16
|
-
#
|
17
|
-
# @api public
|
18
|
-
def self.to_string(value)
|
19
|
-
value.to_s
|
20
|
-
end
|
21
|
-
|
22
|
-
# Creates an Integer instance from a numeric object
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
# Virtus::Coercion::Numeric.to_integer(Rational(2, 2)) # => 1
|
26
|
-
#
|
27
|
-
# @param [Numeric] value
|
28
|
-
#
|
29
|
-
# @return [Integer]
|
30
|
-
#
|
31
|
-
# @api public
|
32
|
-
def self.to_integer(value)
|
33
|
-
value.to_i
|
34
|
-
end
|
35
|
-
|
36
|
-
# Creates a Float instance from a numeric object
|
37
|
-
#
|
38
|
-
# @example
|
39
|
-
# Virtus::Coercion::Numeric.to_float(Rational(2, 2)) # => 1.0
|
40
|
-
#
|
41
|
-
# @param [Numeric] value
|
42
|
-
#
|
43
|
-
# @return [Float]
|
44
|
-
#
|
45
|
-
# @api public
|
46
|
-
def self.to_float(value)
|
47
|
-
value.to_f
|
48
|
-
end
|
49
|
-
|
50
|
-
# Coerce a BigDecimal instance from a numeric object
|
51
|
-
#
|
52
|
-
# @example
|
53
|
-
# Virtus::Coercion::Numeric.to_decimal(Rational(2, 2)) # => BigDecimal('1.0')
|
54
|
-
#
|
55
|
-
# @param [Numeric] value
|
56
|
-
#
|
57
|
-
# @return [BigDecimal]
|
58
|
-
#
|
59
|
-
# @api public
|
60
|
-
def self.to_decimal(value)
|
61
|
-
to_string(value).to_d
|
62
|
-
end
|
63
|
-
|
64
|
-
end # class Numeric
|
65
|
-
end # class Coercion
|
66
|
-
end # module Virtus
|
@@ -1,125 +0,0 @@
|
|
1
|
-
module Virtus
|
2
|
-
class Coercion
|
3
|
-
|
4
|
-
# Coerce Object values
|
5
|
-
class Object < Coercion
|
6
|
-
primitive ::Object
|
7
|
-
|
8
|
-
COERCION_METHOD_REGEXP = /\Ato_/.freeze
|
9
|
-
|
10
|
-
# Create an Array from any Object
|
11
|
-
#
|
12
|
-
# @example with an object that does not respond to #to_a or #to_ary
|
13
|
-
# Virtus::Coercion::Object.to_array(value) # => [ value ]
|
14
|
-
#
|
15
|
-
# @example with an object that responds to #to_a
|
16
|
-
# Virtus::Coercion::Object.to_array(Set[ value ]) # => [ value ]
|
17
|
-
#
|
18
|
-
# @example with n object that responds to #to_ary
|
19
|
-
# Virtus::Coercion::Object.to_array([ value ]) # => [ value ]
|
20
|
-
#
|
21
|
-
# @param [#to_a,#to_ary,Object] value
|
22
|
-
# @param [#to_a,#to_ary,Object] value
|
23
|
-
#
|
24
|
-
# @return [Array]
|
25
|
-
#
|
26
|
-
# @api public
|
27
|
-
def self.to_array(value)
|
28
|
-
Array(value)
|
29
|
-
end
|
30
|
-
|
31
|
-
# Create a Hash from the Object if possible
|
32
|
-
#
|
33
|
-
# @example with a coercible object
|
34
|
-
# Virtus::Coercion::Object.to_hash(key => value) # => { key => value }
|
35
|
-
#
|
36
|
-
# @example with an object that is not coercible
|
37
|
-
# Virtus::Coercion::Object.to_hash(value) # => value
|
38
|
-
#
|
39
|
-
# @param [#to_hash, Object] value
|
40
|
-
#
|
41
|
-
# @return [Hash]
|
42
|
-
# returns a Hash when the object can be coerced
|
43
|
-
# @return [Object]
|
44
|
-
# returns the value when the object cannot be coerced
|
45
|
-
#
|
46
|
-
# @api public
|
47
|
-
def self.to_hash(value)
|
48
|
-
coerce_with_method(value, :to_hash)
|
49
|
-
end
|
50
|
-
|
51
|
-
# Create a String from the Object if possible
|
52
|
-
#
|
53
|
-
# @example with a coercible object
|
54
|
-
# Virtus::Coercion::Object.to_string("string") # => "string"
|
55
|
-
#
|
56
|
-
# @example with an object that is not coercible
|
57
|
-
# Virtus::Coercion::Object.to_string(value) # => value
|
58
|
-
#
|
59
|
-
# @param [#to_str, Object] value
|
60
|
-
#
|
61
|
-
# @return [String]
|
62
|
-
# returns a String when the object can be coerced
|
63
|
-
# @return [Object]
|
64
|
-
# returns the value when the object cannot be coerced
|
65
|
-
#
|
66
|
-
# @api public
|
67
|
-
def self.to_string(value)
|
68
|
-
coerce_with_method(value, :to_str)
|
69
|
-
end
|
70
|
-
|
71
|
-
# Create an Integer from the Object if possible
|
72
|
-
#
|
73
|
-
# @example with a coercible object
|
74
|
-
# Virtus::Coercion::Object.to_integer(1) # => 1
|
75
|
-
#
|
76
|
-
# @example with an object that is not coercible
|
77
|
-
# Virtus::Coercion::Object.to_integer(value) # => value
|
78
|
-
#
|
79
|
-
# @param [#to_int, Object] value
|
80
|
-
#
|
81
|
-
# @return [Integer]
|
82
|
-
# returns an Integer when the object can be coerced
|
83
|
-
# @return [Object]
|
84
|
-
# returns the value when the object cannot be coerced
|
85
|
-
#
|
86
|
-
# @api public
|
87
|
-
def self.to_integer(value)
|
88
|
-
coerce_with_method(value, :to_int)
|
89
|
-
end
|
90
|
-
|
91
|
-
# Passthrough given value
|
92
|
-
#
|
93
|
-
# @param [Object] value
|
94
|
-
#
|
95
|
-
# @return [Object]
|
96
|
-
#
|
97
|
-
# @api private
|
98
|
-
def self.method_missing(method, *args)
|
99
|
-
if method.to_s =~ COERCION_METHOD_REGEXP and args.size == 1
|
100
|
-
args.first
|
101
|
-
else
|
102
|
-
super
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
private_class_method :method_missing
|
107
|
-
|
108
|
-
# Try to use native coercion method on the given value
|
109
|
-
#
|
110
|
-
# @param [Object] value
|
111
|
-
#
|
112
|
-
# @param [Symbol] method
|
113
|
-
#
|
114
|
-
# @return [Object]
|
115
|
-
#
|
116
|
-
# @api private
|
117
|
-
def self.coerce_with_method(value, method)
|
118
|
-
value.respond_to?(method) ? value.public_send(method) : value
|
119
|
-
end
|
120
|
-
|
121
|
-
private_class_method :coerce_with_method
|
122
|
-
|
123
|
-
end # class Object
|
124
|
-
end # class Coercion
|
125
|
-
end # module Virtus
|