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.
Files changed (268) hide show
  1. data/.rspec +1 -1
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/.travis.yml +6 -8
  5. data/Gemfile +8 -2
  6. data/Gemfile.devtools +24 -30
  7. data/Guardfile +17 -6
  8. data/README.md +215 -77
  9. data/TODO.md +6 -0
  10. data/config/flay.yml +2 -2
  11. data/config/flog.yml +1 -1
  12. data/config/mutant.yml +12 -1
  13. data/config/reek.yml +57 -66
  14. data/lib/virtus.rb +126 -42
  15. data/lib/virtus/attribute.rb +52 -240
  16. data/lib/virtus/attribute/accessor.rb +91 -0
  17. data/lib/virtus/attribute/boolean.rb +11 -8
  18. data/lib/virtus/attribute/builder.rb +120 -0
  19. data/lib/virtus/attribute/coercer.rb +51 -0
  20. data/lib/virtus/attribute/coercible.rb +14 -0
  21. data/lib/virtus/attribute/collection.rb +44 -90
  22. data/lib/virtus/attribute/default_value/from_callable.rb +1 -1
  23. data/lib/virtus/attribute/default_value/from_clonable.rb +1 -6
  24. data/lib/virtus/attribute/default_value/from_symbol.rb +3 -3
  25. data/lib/virtus/attribute/embedded_value.rb +37 -28
  26. data/lib/virtus/attribute/hash.rb +69 -71
  27. data/lib/virtus/attribute/lazy_default.rb +18 -0
  28. data/lib/virtus/attribute/strict.rb +16 -0
  29. data/lib/virtus/attribute_set.rb +81 -9
  30. data/lib/virtus/class_inclusions.rb +24 -17
  31. data/lib/virtus/class_methods.rb +13 -31
  32. data/lib/virtus/configuration.rb +77 -0
  33. data/lib/virtus/const_missing_extensions.rb +16 -0
  34. data/lib/virtus/extensions.rb +86 -61
  35. data/lib/virtus/instance_methods.rb +107 -128
  36. data/lib/virtus/model.rb +68 -0
  37. data/lib/virtus/module_builder.rb +184 -0
  38. data/lib/virtus/module_extensions.rb +27 -15
  39. data/lib/virtus/support/equalizer.rb +2 -3
  40. data/lib/virtus/support/type_lookup.rb +1 -1
  41. data/lib/virtus/value_object.rb +24 -31
  42. data/lib/virtus/version.rb +1 -1
  43. data/spec/integration/building_module_spec.rb +68 -0
  44. data/spec/integration/custom_attributes_spec.rb +8 -15
  45. data/spec/integration/custom_collection_attributes_spec.rb +101 -0
  46. data/spec/integration/default_values_spec.rb +9 -2
  47. data/spec/integration/defining_attributes_spec.rb +2 -2
  48. data/spec/integration/using_modules_spec.rb +5 -3
  49. data/spec/shared/freeze_method_behavior.rb +2 -2
  50. data/spec/shared/options_class_method.rb +1 -1
  51. data/spec/spec_helper.rb +25 -5
  52. data/spec/unit/virtus/attribute/boolean/value_coerced_predicate_spec.rb +25 -0
  53. data/spec/unit/virtus/attribute/class_methods/build_spec.rb +115 -22
  54. data/spec/unit/virtus/attribute/class_methods/coerce_spec.rb +32 -0
  55. data/spec/unit/virtus/attribute/coerce_spec.rb +38 -21
  56. data/spec/unit/virtus/attribute/coercible_predicate_spec.rb +20 -0
  57. data/spec/unit/virtus/attribute/collection/class_methods/build_spec.rb +84 -0
  58. data/spec/unit/virtus/attribute/collection/coerce_spec.rb +37 -24
  59. data/spec/unit/virtus/attribute/custom_collection_spec.rb +23 -0
  60. data/spec/unit/virtus/attribute/embedded_value/class_methods/build_spec.rb +37 -0
  61. data/spec/unit/virtus/attribute/embedded_value/coerce_spec.rb +46 -10
  62. data/spec/unit/virtus/attribute/get_spec.rb +15 -63
  63. data/spec/unit/virtus/attribute/hash/class_methods/build_spec.rb +80 -0
  64. data/spec/unit/virtus/attribute/hash/coerce_spec.rb +75 -13
  65. data/spec/unit/virtus/attribute/lazy_predicate_spec.rb +20 -0
  66. data/spec/unit/virtus/attribute/set_default_value_spec.rb +74 -0
  67. data/spec/unit/virtus/attribute/set_spec.rb +16 -36
  68. data/spec/unit/virtus/attribute/value_coerced_predicate_spec.rb +19 -0
  69. data/spec/unit/virtus/attribute_set/append_spec.rb +3 -5
  70. data/spec/unit/virtus/attribute_set/define_reader_method_spec.rb +1 -1
  71. data/spec/unit/virtus/attribute_set/define_writer_method_spec.rb +1 -1
  72. data/spec/unit/virtus/attribute_set/each_spec.rb +3 -3
  73. data/spec/unit/virtus/attribute_set/element_reference_spec.rb +1 -1
  74. data/spec/unit/virtus/attribute_set/element_set_spec.rb +4 -4
  75. data/spec/unit/virtus/attribute_set/merge_spec.rb +10 -16
  76. data/spec/unit/virtus/attribute_set/reset_spec.rb +6 -10
  77. data/spec/unit/virtus/attribute_spec.rb +222 -0
  78. data/spec/unit/virtus/attributes_reader_spec.rb +41 -0
  79. data/spec/unit/virtus/attributes_writer_spec.rb +51 -0
  80. data/spec/unit/virtus/class_methods/new_spec.rb +39 -0
  81. data/spec/unit/virtus/config_spec.rb +13 -0
  82. data/spec/unit/virtus/element_reader_spec.rb +21 -0
  83. data/spec/unit/virtus/element_writer_spec.rb +19 -0
  84. data/spec/unit/virtus/freeze_spec.rb +21 -0
  85. data/spec/unit/virtus/model_spec.rb +134 -0
  86. data/spec/unit/virtus/module_spec.rb +76 -0
  87. data/spec/unit/virtus/set_default_attributes_spec.rb +25 -0
  88. data/spec/unit/virtus/value_object_spec.rb +105 -0
  89. data/virtus.gemspec +4 -2
  90. metadata +82 -191
  91. data/.rvmrc +0 -1
  92. data/TODO +0 -1
  93. data/config/roodi.yml +0 -17
  94. data/lib/virtus/attribute/array.rb +0 -24
  95. data/lib/virtus/attribute/class.rb +0 -21
  96. data/lib/virtus/attribute/date.rb +0 -34
  97. data/lib/virtus/attribute/date_time.rb +0 -36
  98. data/lib/virtus/attribute/decimal.rb +0 -21
  99. data/lib/virtus/attribute/embedded_value/from_open_struct.rb +0 -19
  100. data/lib/virtus/attribute/embedded_value/from_struct.rb +0 -19
  101. data/lib/virtus/attribute/float.rb +0 -30
  102. data/lib/virtus/attribute/integer.rb +0 -27
  103. data/lib/virtus/attribute/numeric.rb +0 -11
  104. data/lib/virtus/attribute/object.rb +0 -11
  105. data/lib/virtus/attribute/set.rb +0 -24
  106. data/lib/virtus/attribute/string.rb +0 -24
  107. data/lib/virtus/attribute/symbol.rb +0 -21
  108. data/lib/virtus/attribute/time.rb +0 -36
  109. data/lib/virtus/coercion.rb +0 -32
  110. data/lib/virtus/coercion/array.rb +0 -23
  111. data/lib/virtus/coercion/date.rb +0 -26
  112. data/lib/virtus/coercion/date_time.rb +0 -26
  113. data/lib/virtus/coercion/decimal.rb +0 -40
  114. data/lib/virtus/coercion/false_class.rb +0 -24
  115. data/lib/virtus/coercion/float.rb +0 -39
  116. data/lib/virtus/coercion/hash.rb +0 -71
  117. data/lib/virtus/coercion/integer.rb +0 -83
  118. data/lib/virtus/coercion/numeric.rb +0 -66
  119. data/lib/virtus/coercion/object.rb +0 -125
  120. data/lib/virtus/coercion/string.rb +0 -218
  121. data/lib/virtus/coercion/symbol.rb +0 -24
  122. data/lib/virtus/coercion/time.rb +0 -40
  123. data/lib/virtus/coercion/time_coercions.rb +0 -86
  124. data/lib/virtus/coercion/true_class.rb +0 -24
  125. data/spec/unit/virtus/attribute/array/coerce_spec.rb +0 -13
  126. data/spec/unit/virtus/attribute/boolean/coerce_spec.rb +0 -85
  127. data/spec/unit/virtus/attribute/boolean/define_reader_method_spec.rb +0 -15
  128. data/spec/unit/virtus/attribute/boolean/value_coerced_spec.rb +0 -97
  129. data/spec/unit/virtus/attribute/boolean_spec.rb +0 -19
  130. data/spec/unit/virtus/attribute/class/coerce_spec.rb +0 -13
  131. data/spec/unit/virtus/attribute/class_methods/accessor_spec.rb +0 -12
  132. data/spec/unit/virtus/attribute/class_methods/coercion_method_spec.rb +0 -9
  133. data/spec/unit/virtus/attribute/class_methods/default_spec.rb +0 -9
  134. data/spec/unit/virtus/attribute/class_methods/determine_type_spec.rb +0 -117
  135. data/spec/unit/virtus/attribute/class_methods/merge_options_spec.rb +0 -11
  136. data/spec/unit/virtus/attribute/class_methods/primitive_spec.rb +0 -9
  137. data/spec/unit/virtus/attribute/class_methods/reader_spec.rb +0 -9
  138. data/spec/unit/virtus/attribute/class_methods/writer_spec.rb +0 -9
  139. data/spec/unit/virtus/attribute/coercion_method_spec.rb +0 -12
  140. data/spec/unit/virtus/attribute/collection/class_methods/merge_options_spec.rb +0 -40
  141. data/spec/unit/virtus/attribute/collection/coerce_and_append_member_spec.rb +0 -16
  142. data/spec/unit/virtus/attribute/collection/member_coercion/coerce_and_append_member_spec.rb +0 -18
  143. data/spec/unit/virtus/attribute/collection/member_type_spec.rb +0 -17
  144. data/spec/unit/virtus/attribute/collection/new_collection_spec.rb +0 -9
  145. data/spec/unit/virtus/attribute/date/coerce_spec.rb +0 -47
  146. data/spec/unit/virtus/attribute/date/value_coerced_spec.rb +0 -46
  147. data/spec/unit/virtus/attribute/date_time/coerce_spec.rb +0 -80
  148. data/spec/unit/virtus/attribute/decimal/coerce_spec.rb +0 -123
  149. data/spec/unit/virtus/attribute/default_spec.rb +0 -28
  150. data/spec/unit/virtus/attribute/default_value/call_spec.rb +0 -21
  151. data/spec/unit/virtus/attribute/default_value/class_methods/build_spec.rb +0 -23
  152. data/spec/unit/virtus/attribute/default_value/class_methods/new_spec.rb +0 -21
  153. data/spec/unit/virtus/attribute/default_value/from_callable/call_spec.rb +0 -19
  154. data/spec/unit/virtus/attribute/default_value/from_callable/class_methods/handle_spec.rb +0 -17
  155. data/spec/unit/virtus/attribute/default_value/from_clonable/call_spec.rb +0 -20
  156. data/spec/unit/virtus/attribute/default_value/from_clonable/class_methods/handle_spec.rb +0 -19
  157. data/spec/unit/virtus/attribute/default_value/from_symbol/call_spec.rb +0 -17
  158. data/spec/unit/virtus/attribute/default_value/from_symbol/class_methods/handle_spec.rb +0 -17
  159. data/spec/unit/virtus/attribute/default_value/value_spec.rb +0 -10
  160. data/spec/unit/virtus/attribute/define_accessor_methods_spec.rb +0 -26
  161. data/spec/unit/virtus/attribute/define_reader_method_spec.rb +0 -24
  162. data/spec/unit/virtus/attribute/define_writer_method_spec.rb +0 -24
  163. data/spec/unit/virtus/attribute/embedded_value/class_methods/determine_type_spec.rb +0 -23
  164. data/spec/unit/virtus/attribute/embedded_value/class_methods/merge_options_spec.rb +0 -17
  165. data/spec/unit/virtus/attribute/embedded_value/from_open_struct/coerce_spec.rb +0 -34
  166. data/spec/unit/virtus/attribute/embedded_value/from_struct/coerce_spec.rb +0 -34
  167. data/spec/unit/virtus/attribute/float/coerce_spec.rb +0 -123
  168. data/spec/unit/virtus/attribute/hash/class_methods/merge_options_spec.rb +0 -33
  169. data/spec/unit/virtus/attribute/hash/key_type_spec.rb +0 -10
  170. data/spec/unit/virtus/attribute/hash/value_type_spec.rb +0 -10
  171. data/spec/unit/virtus/attribute/inspect_spec.rb +0 -27
  172. data/spec/unit/virtus/attribute/integer/coerce_spec.rb +0 -117
  173. data/spec/unit/virtus/attribute/name_spec.rb +0 -12
  174. data/spec/unit/virtus/attribute/numeric/class_methods/descendants_spec.rb +0 -15
  175. data/spec/unit/virtus/attribute/numeric/class_methods/max_spec.rb +0 -9
  176. data/spec/unit/virtus/attribute/numeric/class_methods/min_spec.rb +0 -9
  177. data/spec/unit/virtus/attribute/options_spec.rb +0 -14
  178. data/spec/unit/virtus/attribute/public_reader_spec.rb +0 -24
  179. data/spec/unit/virtus/attribute/public_writer_spec.rb +0 -24
  180. data/spec/unit/virtus/attribute/set/coerce_spec.rb +0 -13
  181. data/spec/unit/virtus/attribute/string/coerce_spec.rb +0 -11
  182. data/spec/unit/virtus/attribute/symbol/coerce_spec.rb +0 -13
  183. data/spec/unit/virtus/attribute/time/coerce_spec.rb +0 -67
  184. data/spec/unit/virtus/attribute/value_coerced_spec.rb +0 -19
  185. data/spec/unit/virtus/class_methods/attribute_set_spec.rb +0 -9
  186. data/spec/unit/virtus/class_methods/attribute_spec.rb +0 -30
  187. data/spec/unit/virtus/class_methods/attributes_spec.rb +0 -22
  188. data/spec/unit/virtus/class_methods/const_missing_spec.rb +0 -27
  189. data/spec/unit/virtus/class_methods/inherited_spec.rb +0 -21
  190. data/spec/unit/virtus/coercion/array/class_methods/to_set_spec.rb +0 -12
  191. data/spec/unit/virtus/coercion/class_methods/element_reference_spec.rb +0 -17
  192. data/spec/unit/virtus/coercion/class_methods/primitive_spec.rb +0 -13
  193. data/spec/unit/virtus/coercion/date/class_methods/to_date_spec.rb +0 -10
  194. data/spec/unit/virtus/coercion/date/class_methods/to_datetime_spec.rb +0 -30
  195. data/spec/unit/virtus/coercion/date/class_methods/to_string_spec.rb +0 -12
  196. data/spec/unit/virtus/coercion/date/class_methods/to_time_spec.rb +0 -12
  197. data/spec/unit/virtus/coercion/date_time/class_methods/to_date_spec.rb +0 -30
  198. data/spec/unit/virtus/coercion/date_time/class_methods/to_datetime_spec.rb +0 -10
  199. data/spec/unit/virtus/coercion/date_time/class_methods/to_string_spec.rb +0 -12
  200. data/spec/unit/virtus/coercion/date_time/class_methods/to_time_spec.rb +0 -30
  201. data/spec/unit/virtus/coercion/decimal/class_methods/to_decimal_spec.rb +0 -9
  202. data/spec/unit/virtus/coercion/decimal/class_methods/to_float_spec.rb +0 -12
  203. data/spec/unit/virtus/coercion/decimal/class_methods/to_integer_spec.rb +0 -12
  204. data/spec/unit/virtus/coercion/decimal/class_methods/to_string_spec.rb +0 -12
  205. data/spec/unit/virtus/coercion/false_class/class_methods/to_string_spec.rb +0 -12
  206. data/spec/unit/virtus/coercion/float/class_methods/to_decimal_spec.rb +0 -12
  207. data/spec/unit/virtus/coercion/float/class_methods/to_float_spec.rb +0 -9
  208. data/spec/unit/virtus/coercion/float/class_methods/to_integer_spec.rb +0 -12
  209. data/spec/unit/virtus/coercion/float/class_methods/to_string_spec.rb +0 -12
  210. data/spec/unit/virtus/coercion/hash/class_methods/to_date_spec.rb +0 -38
  211. data/spec/unit/virtus/coercion/hash/class_methods/to_datetime_spec.rb +0 -38
  212. data/spec/unit/virtus/coercion/hash/class_methods/to_time_spec.rb +0 -38
  213. data/spec/unit/virtus/coercion/integer/class_methods/to_boolean_spec.rb +0 -25
  214. data/spec/unit/virtus/coercion/integer/class_methods/to_decimal_spec.rb +0 -12
  215. data/spec/unit/virtus/coercion/integer/class_methods/to_float_spec.rb +0 -12
  216. data/spec/unit/virtus/coercion/integer/class_methods/to_integer_spec.rb +0 -9
  217. data/spec/unit/virtus/coercion/integer/class_methods/to_string_spec.rb +0 -12
  218. data/spec/unit/virtus/coercion/numeric/class_methods/to_decimal_spec.rb +0 -10
  219. data/spec/unit/virtus/coercion/numeric/class_methods/to_float_spec.rb +0 -10
  220. data/spec/unit/virtus/coercion/numeric/class_methods/to_integer_spec.rb +0 -10
  221. data/spec/unit/virtus/coercion/numeric/class_methods/to_string_spec.rb +0 -12
  222. data/spec/unit/virtus/coercion/object/class_methods/method_missing_spec.rb +0 -33
  223. data/spec/unit/virtus/coercion/object/class_methods/to_array_spec.rb +0 -51
  224. data/spec/unit/virtus/coercion/object/class_methods/to_hash_spec.rb +0 -22
  225. data/spec/unit/virtus/coercion/object/class_methods/to_integer_spec.rb +0 -22
  226. data/spec/unit/virtus/coercion/object/class_methods/to_string_spec.rb +0 -22
  227. data/spec/unit/virtus/coercion/string/class_methods/to_boolean_spec.rb +0 -29
  228. data/spec/unit/virtus/coercion/string/class_methods/to_constant_spec.rb +0 -49
  229. data/spec/unit/virtus/coercion/string/class_methods/to_date_spec.rb +0 -23
  230. data/spec/unit/virtus/coercion/string/class_methods/to_datetime_spec.rb +0 -50
  231. data/spec/unit/virtus/coercion/string/class_methods/to_decimal_spec.rb +0 -47
  232. data/spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb +0 -57
  233. data/spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb +0 -68
  234. data/spec/unit/virtus/coercion/string/class_methods/to_symbol_spec.rb +0 -9
  235. data/spec/unit/virtus/coercion/string/class_methods/to_time_spec.rb +0 -50
  236. data/spec/unit/virtus/coercion/symbol/class_methods/to_string_spec.rb +0 -12
  237. data/spec/unit/virtus/coercion/time/class_methods/to_integer_spec.rb +0 -10
  238. data/spec/unit/virtus/coercion/time/class_methods/to_time_spec.rb +0 -10
  239. data/spec/unit/virtus/coercion/time_coercions/to_date_spec.rb +0 -33
  240. data/spec/unit/virtus/coercion/time_coercions/to_datetime_spec.rb +0 -33
  241. data/spec/unit/virtus/coercion/time_coercions/to_string_spec.rb +0 -18
  242. data/spec/unit/virtus/coercion/time_coercions/to_time_spec.rb +0 -33
  243. data/spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb +0 -12
  244. data/spec/unit/virtus/equalizer/append_spec.rb +0 -82
  245. data/spec/unit/virtus/equalizer/class_method/new_spec.rb +0 -111
  246. data/spec/unit/virtus/equalizer/methods/eql_spec.rb +0 -47
  247. data/spec/unit/virtus/equalizer/methods/equal_value_spec.rb +0 -57
  248. data/spec/unit/virtus/extensions/allowed_writer_methods_spec.rb +0 -25
  249. data/spec/unit/virtus/extensions/attribute_spec.rb +0 -26
  250. data/spec/unit/virtus/instance_methods/attributes_spec.rb +0 -140
  251. data/spec/unit/virtus/instance_methods/element_reference_spec.rb +0 -24
  252. data/spec/unit/virtus/instance_methods/element_set_spec.rb +0 -28
  253. data/spec/unit/virtus/instance_methods/freeze_spec.rb +0 -64
  254. data/spec/unit/virtus/instance_methods/initialize_spec.rb +0 -48
  255. data/spec/unit/virtus/instance_methods/to_hash_spec.rb +0 -23
  256. data/spec/unit/virtus/module_extensions/attribute_spec.rb +0 -31
  257. data/spec/unit/virtus/options/accept_options_spec.rb +0 -37
  258. data/spec/unit/virtus/options/accepted_options_spec.rb +0 -21
  259. data/spec/unit/virtus/options/options_spec.rb +0 -34
  260. data/spec/unit/virtus/type_lookup/class_methods/extended_spec.rb +0 -9
  261. data/spec/unit/virtus/type_lookup/determine_type_spec.rb +0 -81
  262. data/spec/unit/virtus/type_lookup/primitive_spec.rb +0 -9
  263. data/spec/unit/virtus/value_object/class_methods/allowed_writer_methods_spec.rb +0 -15
  264. data/spec/unit/virtus/value_object/class_methods/attribute_spec.rb +0 -50
  265. data/spec/unit/virtus/value_object/class_methods/equalizer_spec.rb +0 -24
  266. data/spec/unit/virtus/value_object/initialize_spec.rb +0 -19
  267. data/spec/unit/virtus/value_object/instance_methods/clone_spec.rb +0 -21
  268. data/spec/unit/virtus/value_object/instance_methods/with_spec.rb +0 -31
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use @$(basename `pwd`) --create
data/TODO DELETED
@@ -1 +0,0 @@
1
- * Make #to_time #to_date and #to_datetime work on Ruby 1.8.7 instead of typecasting to string and parsing the value
@@ -1,17 +0,0 @@
1
- ---
2
- AbcMetricMethodCheck: { score: 12.1 }
3
- AssignmentInConditionalCheck: { }
4
- CaseMissingElseCheck: { }
5
- ClassLineCountCheck: { line_count: 325 }
6
- ClassNameCheck: { pattern: !ruby/regexp /\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/ }
7
- ClassVariableCheck: { }
8
- CyclomaticComplexityBlockCheck: { complexity: 4 }
9
- CyclomaticComplexityMethodCheck: { complexity: 4 }
10
- EmptyRescueBodyCheck: { }
11
- ForLoopCheck: { }
12
- MethodLineCountCheck: { line_count: 10 }
13
- MethodNameCheck: { pattern: !ruby/regexp /\A(?:[a-z\d](?:_?[a-z\d])+[?!=]?|\[\]=?|==|<=>|<<|[+*&|-])\z/ }
14
- ModuleLineCountCheck: { line_count: 331 }
15
- ModuleNameCheck: { pattern: !ruby/regexp /\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/ }
16
- # TODO: decrease parameter_count to 2 or less
17
- ParameterNumberCheck: { parameter_count: 3 }
@@ -1,24 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Array
5
- #
6
- # @example
7
- # class Post
8
- # include Virtus
9
- #
10
- # attribute :tags, Array
11
- # end
12
- #
13
- # post = Post.new(:tags => %w(red green blue))
14
- #
15
- class Array < Collection
16
- primitive ::Array
17
- coercion_method :to_array
18
- default primitive.new
19
-
20
- include Collection::MemberCoercion
21
-
22
- end # class Array
23
- end # class Attribute
24
- end # module Virtus
@@ -1,21 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Class
5
- #
6
- # @example
7
- # class Entity
8
- # include Virtus
9
- #
10
- # attribute :model, Class
11
- # end
12
- #
13
- # post = Entity.new(:model => Model)
14
- #
15
- class Class < Object
16
- primitive ::Class
17
- coercion_method :to_constant
18
-
19
- end # class Class
20
- end # class Attribute
21
- end # module Virtus
@@ -1,34 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Date
5
- #
6
- # @example
7
- # class Post
8
- # include Virtus
9
- #
10
- # attribute :published_on, Date
11
- # end
12
- #
13
- # Post.new(:published_on => Date.today)
14
- #
15
- # # typecasting from a string
16
- # Post.new(:published_on => '2011/06/09')
17
- #
18
- # # typecasting from a hash
19
- # Post.new(:published_on => {
20
- # :year => 2011,
21
- # :month => 6,
22
- # :day => 9,
23
- # })
24
- #
25
- # # typecasting from an object which implements #to_date
26
- # Post.new(:published_on => DateTime.now)
27
- #
28
- class Date < Object
29
- primitive ::Date
30
- coercion_method :to_date
31
-
32
- end # class Date
33
- end # class Attribute
34
- end # module Virtus
@@ -1,36 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # DateTime
5
- #
6
- # @example
7
- # class Post
8
- # include Virtus
9
- #
10
- # attribute :published_at, DateTime
11
- # end
12
- #
13
- # Post.new(:published_at => DateTime.now)
14
- #
15
- # # typecasting from a string
16
- # Post.new(:published_on => '2011/06/09 10:48')
17
- #
18
- # # typecasting from a hash
19
- # Post.new(:published_on => {
20
- # :year => 2011,
21
- # :month => 6,
22
- # :day => 9,
23
- # :hour => 10,
24
- # :min => 48,
25
- # })
26
- #
27
- # # typecasting from an object which implements #to_datetime
28
- # Post.new(:published_on => Time.now)
29
- #
30
- class DateTime < Object
31
- primitive ::DateTime
32
- coercion_method :to_datetime
33
-
34
- end # class DateTim
35
- end # class Attribute
36
- end # module Virtus
@@ -1,21 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Decimal
5
- #
6
- # @example
7
- # class ExchangeRate
8
- # include Virtus
9
- #
10
- # attribute :dollar, Decimal
11
- # end
12
- #
13
- # ExchangeRate.new(:dollar => '2.6948')
14
- #
15
- class Decimal < Numeric
16
- primitive ::BigDecimal
17
- coercion_method :to_decimal
18
-
19
- end # class Decimal
20
- end # class Attribute
21
- end # module Virtus
@@ -1,19 +0,0 @@
1
- module Virtus
2
- class Attribute
3
- class EmbeddedValue < Object
4
-
5
- # EmbeddedValue attribute handling OpenStruct primitive or Virtus object
6
- #
7
- class FromOpenStruct < EmbeddedValue
8
-
9
- # @api private
10
- def coerce(attributes)
11
- unless attributes.nil?
12
- super or @primitive.new(attributes)
13
- end
14
- end
15
-
16
- end # class FromOpenStruct
17
- end # class EmbeddedValue
18
- end # class Attribute
19
- end # module Virtus
@@ -1,19 +0,0 @@
1
- module Virtus
2
- class Attribute
3
- class EmbeddedValue < Object
4
-
5
- # EmbeddedValue attribute handling Struct primitive
6
- #
7
- class FromStruct < EmbeddedValue
8
-
9
- # @api private
10
- def coerce(attributes)
11
- unless attributes.nil?
12
- super or @primitive.new(*attributes)
13
- end
14
- end
15
-
16
- end # class FromStruct
17
- end # class EmbeddedValue
18
- end # class Attribute
19
- end # module Virtus
@@ -1,30 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Float
5
- #
6
- # @example
7
- # class ExchangeRate
8
- # include Virtus
9
- #
10
- # attribute :dollar, Float
11
- # end
12
- #
13
- # ExchangeRate.new(:dollar => 2.69)
14
- #
15
- # # typecasting from a string
16
- # ExchangeRate.new(:dollar => '2.69')
17
- #
18
- # # typecasting from an integer
19
- # ExchangeRate.new(:dollar => 2)
20
- #
21
- # # typecasting from an object which implements #to_f
22
- # ExchangeRate.new(:dollar => BigDecimal.new('2.69')
23
- #
24
- class Float < Numeric
25
- primitive ::Float
26
- coercion_method :to_float
27
-
28
- end # class Float
29
- end # class Attribute
30
- end # module Virtus
@@ -1,27 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Integer
5
- #
6
- # @example
7
- # class Post
8
- # include Virtus
9
- #
10
- # attribute :read_count, Integer
11
- # end
12
- #
13
- # Post.new(:read_count => 100)
14
- #
15
- # # typecasting from a string
16
- # Post.new(:read_count => '100')
17
- #
18
- # # typecasting from an object that implements #to_i
19
- # Post.new(:read_count => 100.0)
20
- #
21
- class Integer < Numeric
22
- primitive ::Integer
23
- coercion_method :to_integer
24
-
25
- end # class Integer
26
- end # class Attribute
27
- end # module Virtus
@@ -1,11 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Base class for all numerical attributes
5
- class Numeric < Object
6
- primitive ::Numeric
7
- accept_options :min, :max
8
-
9
- end # class Numeric
10
- end # class Attribute
11
- end # module Virtus
@@ -1,11 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Base class for every attribute
5
- class Object < Attribute
6
- primitive ::Object
7
- coercion_method :to_object
8
-
9
- end # class Object
10
- end # class Attribute
11
- end # module Virtus
@@ -1,24 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Set
5
- #
6
- # @example
7
- # class Post
8
- # include Virtus
9
- #
10
- # attribute :tags, Set
11
- # end
12
- #
13
- # post = Post.new(:tags => %w(red green blue))
14
- #
15
- class Set < Collection
16
- primitive ::Set
17
- coercion_method :to_set
18
- default primitive.new
19
-
20
- include Collection::MemberCoercion
21
-
22
- end # class Set
23
- end # class Attribute
24
- end # module Virtus
@@ -1,24 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # String
5
- #
6
- # @example
7
- # class User
8
- # include Virtus
9
- #
10
- # attribute :name, String
11
- # end
12
- #
13
- # User.new(:name => 'John')
14
- #
15
- # # typecasting from an object which implements #to_s
16
- # User.new(:name => :John)
17
- #
18
- class String < Object
19
- primitive ::String
20
- coercion_method :to_string
21
-
22
- end # class String
23
- end # class Attribute
24
- end # module Virtus
@@ -1,21 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Symbol
5
- #
6
- # @example
7
- # class Product
8
- # include Virtus
9
- #
10
- # attribute :code, Symbol
11
- # end
12
- #
13
- # product = Product.new(:code => :red)
14
- #
15
- class Symbol < Object
16
- primitive ::Symbol
17
- coercion_method :to_symbol
18
-
19
- end # class Symbol
20
- end # class Attribute
21
- end # module Virtus
@@ -1,36 +0,0 @@
1
- module Virtus
2
- class Attribute
3
-
4
- # Time
5
- #
6
- # @example
7
- # class Post
8
- # include Virtus
9
- #
10
- # attribute :published_at, Time
11
- # end
12
- #
13
- # Post.new(:published_at => Time.now)
14
- #
15
- # # typecasting from a string
16
- # Post.new(:published_at => '2011/06/09 11:08')
17
- #
18
- # # typecasting from a hash
19
- # Post.new(:published_at => {
20
- # :year => 2011,
21
- # :month => 6,
22
- # :day => 9,
23
- # :hour => 11,
24
- # :min => 8,
25
- # })
26
- #
27
- # # typecasting from an object which implements #to_time
28
- # Post.new(:published_at => DateTime.now)
29
- #
30
- class Time < Object
31
- primitive ::Time
32
- coercion_method :to_time
33
-
34
- end # class Time
35
- end # class Attribute
36
- end # module Virtus
@@ -1,32 +0,0 @@
1
- module Virtus
2
-
3
- # Coerce abstract class
4
- #
5
- # @abstract
6
- #
7
- class Coercion
8
- extend DescendantsTracker
9
- extend TypeLookup
10
- extend Options
11
-
12
- accept_options :primitive
13
-
14
- # Return a class that matches given name
15
- #
16
- # Defaults to Virtus::Coercion::Object
17
- #
18
- # @example
19
- # Virtus::Coercion['String'] # => Virtus::Coercion::String
20
- # Virtus::Coercion[String] # => Virtus::Coercion::String
21
- #
22
- # @param [String]
23
- #
24
- # @return [Class]
25
- #
26
- # @api private
27
- def self.[](name)
28
- determine_type(name) or Coercion::Object
29
- end
30
-
31
- end # Coerce
32
- end # Virtus
@@ -1,23 +0,0 @@
1
- module Virtus
2
- class Coercion
3
-
4
- # Coerce Array values
5
- class Array < Object
6
- primitive ::Array
7
-
8
- TIME_SEGMENTS = [ :year, :month, :day, :hour, :min, :sec ].freeze
9
-
10
- # Creates a Set instance from an Array
11
- #
12
- # @param [Array] value
13
- #
14
- # @return [Array]
15
- #
16
- # @api private
17
- def self.to_set(value)
18
- value.to_set
19
- end
20
-
21
- end # class Array
22
- end # class Coercion
23
- end # module Virtus