virtus 0.0.5 → 0.0.6

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 (113) hide show
  1. data/.travis.yml +9 -2
  2. data/.yardopts +1 -0
  3. data/History.md +51 -0
  4. data/{README.markdown → README.md} +63 -7
  5. data/TODO +2 -4
  6. data/VERSION +1 -1
  7. data/config/flay.yml +2 -2
  8. data/config/flog.yml +1 -1
  9. data/config/roodi.yml +5 -6
  10. data/config/site.reek +3 -3
  11. data/examples/custom_coercion_spec.rb +50 -0
  12. data/examples/default_values_spec.rb +21 -0
  13. data/lib/virtus.rb +21 -6
  14. data/lib/virtus/attribute.rb +113 -253
  15. data/lib/virtus/attribute/array.rb +6 -3
  16. data/lib/virtus/attribute/boolean.rb +9 -28
  17. data/lib/virtus/attribute/date.rb +9 -12
  18. data/lib/virtus/attribute/date_time.rb +10 -12
  19. data/lib/virtus/attribute/decimal.rb +4 -11
  20. data/lib/virtus/attribute/float.rb +4 -11
  21. data/lib/virtus/attribute/hash.rb +5 -3
  22. data/lib/virtus/attribute/integer.rb +4 -11
  23. data/lib/virtus/attribute/numeric.rb +1 -0
  24. data/lib/virtus/attribute/object.rb +1 -0
  25. data/lib/virtus/attribute/string.rb +4 -11
  26. data/lib/virtus/attribute/time.rb +9 -16
  27. data/lib/virtus/class_methods.rb +42 -7
  28. data/lib/virtus/coercion.rb +32 -0
  29. data/lib/virtus/coercion/date.rb +26 -0
  30. data/lib/virtus/coercion/date_time.rb +26 -0
  31. data/lib/virtus/coercion/decimal.rb +40 -0
  32. data/lib/virtus/coercion/false_class.rb +24 -0
  33. data/lib/virtus/coercion/float.rb +24 -0
  34. data/lib/virtus/coercion/hash.rb +82 -0
  35. data/lib/virtus/coercion/integer.rb +60 -0
  36. data/lib/virtus/coercion/numeric.rb +66 -0
  37. data/lib/virtus/coercion/object.rb +25 -0
  38. data/lib/virtus/coercion/string.rb +155 -0
  39. data/lib/virtus/coercion/symbol.rb +24 -0
  40. data/lib/virtus/coercion/time.rb +26 -0
  41. data/lib/virtus/coercion/time_coercions.rb +85 -0
  42. data/lib/virtus/coercion/true_class.rb +24 -0
  43. data/lib/virtus/instance_methods.rb +7 -0
  44. data/lib/virtus/support/descendants_tracker.rb +1 -1
  45. data/lib/virtus/support/options.rb +114 -0
  46. data/lib/virtus/support/type_lookup.rb +95 -0
  47. data/spec/integration/virtus/attributes/attribute/{typecast_spec.rb → set_spec.rb} +7 -7
  48. data/spec/unit/shared/attribute.rb +3 -3
  49. data/spec/unit/shared/attribute/accept_options.rb +0 -18
  50. data/spec/unit/shared/attribute/accepted_options.rb +0 -6
  51. data/spec/unit/shared/attribute/get.rb +32 -17
  52. data/spec/unit/shared/attribute/inspect.rb +7 -0
  53. data/spec/unit/shared/attribute/primitive.rb +15 -0
  54. data/spec/unit/shared/attribute/set.rb +16 -21
  55. data/spec/unit/virtus/attribute/array_spec.rb +18 -3
  56. data/spec/unit/virtus/attribute/boolean_spec.rb +8 -6
  57. data/spec/unit/virtus/attribute/date_spec.rb +8 -6
  58. data/spec/unit/virtus/attribute/date_time_spec.rb +8 -6
  59. data/spec/unit/virtus/attribute/decimal_spec.rb +18 -6
  60. data/spec/unit/virtus/attribute/float_spec.rb +19 -7
  61. data/spec/unit/virtus/attribute/hash_spec.rb +5 -3
  62. data/spec/unit/virtus/attribute/integer_spec.rb +10 -8
  63. data/spec/unit/virtus/attribute/string_spec.rb +10 -8
  64. data/spec/unit/virtus/attribute/time_spec.rb +8 -6
  65. data/spec/unit/virtus/class_methods/attributes_spec.rb +11 -0
  66. data/spec/unit/virtus/coercion/class_name_reference_spec.rb +17 -0
  67. data/spec/unit/virtus/coercion/date/class_methods/to_datetime_spec.rb +30 -0
  68. data/spec/unit/virtus/coercion/date/class_methods/to_string_spec.rb +12 -0
  69. data/spec/unit/virtus/coercion/date/class_methods/to_time_spec.rb +12 -0
  70. data/spec/unit/virtus/coercion/date_time/class_methods/to_date_spec.rb +30 -0
  71. data/spec/unit/virtus/coercion/date_time/class_methods/to_string_spec.rb +12 -0
  72. data/spec/unit/virtus/coercion/date_time/class_methods/to_time_spec.rb +30 -0
  73. data/spec/unit/virtus/coercion/decimal/class_methods/to_float_spec.rb +12 -0
  74. data/spec/unit/virtus/coercion/decimal/class_methods/to_integer_spec.rb +12 -0
  75. data/spec/unit/virtus/coercion/decimal/class_methods/to_string_spec.rb +12 -0
  76. data/spec/unit/virtus/coercion/false_class/class_methods/to_string_spec.rb +12 -0
  77. data/spec/unit/virtus/coercion/float/class_methods/to_decimal_spec.rb +12 -0
  78. data/spec/unit/virtus/coercion/float/class_methods/to_integer_spec.rb +12 -0
  79. data/spec/unit/virtus/coercion/float/class_methods/to_string_spec.rb +12 -0
  80. data/spec/unit/virtus/coercion/hash/class_methods/to_array_spec.rb +12 -0
  81. data/spec/unit/virtus/coercion/hash/class_methods/to_date_spec.rb +31 -0
  82. data/spec/unit/virtus/coercion/hash/class_methods/to_datetime_spec.rb +31 -0
  83. data/spec/unit/virtus/coercion/hash/class_methods/to_time_spec.rb +31 -0
  84. data/spec/unit/virtus/coercion/integer/class_methods/to_boolean_spec.rb +25 -0
  85. data/spec/unit/virtus/coercion/integer/class_methods/to_decimal_spec.rb +12 -0
  86. data/spec/unit/virtus/coercion/integer/class_methods/to_float_spec.rb +12 -0
  87. data/spec/unit/virtus/coercion/integer/class_methods/to_string_spec.rb +12 -0
  88. data/spec/unit/virtus/coercion/object/class_methods/method_missing_spec.rb +33 -0
  89. data/spec/unit/virtus/coercion/string/class_methods/to_boolean_spec.rb +29 -0
  90. data/spec/unit/virtus/coercion/string/class_methods/to_date_spec.rb +23 -0
  91. data/spec/unit/virtus/coercion/string/class_methods/to_datetime_spec.rb +50 -0
  92. data/spec/unit/virtus/coercion/string/class_methods/to_decimal_spec.rb +23 -0
  93. data/spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb +21 -0
  94. data/spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb +21 -0
  95. data/spec/unit/virtus/coercion/string/class_methods/to_time_spec.rb +50 -0
  96. data/spec/unit/virtus/coercion/symbol/class_methods/to_string_spec.rb +12 -0
  97. data/spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb +12 -0
  98. data/spec/unit/virtus/instance_methods/attributes_spec.rb +7 -0
  99. data/spec/unit/virtus/options/accept_options_spec.rb +38 -0
  100. data/spec/unit/virtus/options/accepted_options_spec.rb +21 -0
  101. data/spec/unit/virtus/options/options_spec.rb +11 -0
  102. data/spec/unit/virtus/type_lookup/determine_type_spec.rb +68 -0
  103. data/spec/unit/virtus/type_lookup/primitive_spec.rb +9 -0
  104. data/virtus.gemspec +70 -17
  105. metadata +78 -27
  106. data/History.txt +0 -38
  107. data/lib/virtus/typecast/boolean.rb +0 -29
  108. data/lib/virtus/typecast/numeric.rb +0 -87
  109. data/lib/virtus/typecast/string.rb +0 -24
  110. data/lib/virtus/typecast/time.rb +0 -192
  111. data/spec/unit/shared/attribute/complex.rb +0 -15
  112. data/spec/unit/shared/attribute/options.rb +0 -7
  113. data/spec/unit/virtus/attribute/attribute_spec.rb +0 -12
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Virtus::TypeLookup, '#primitive' do
4
+ subject { object.primitive }
5
+
6
+ let(:object) { Class.new { extend Virtus::TypeLookup } }
7
+
8
+ specify { expect { subject }.to raise_error(NotImplementedError, "#{object}.primitive must be implemented") }
9
+ end
data/virtus.gemspec CHANGED
@@ -5,25 +5,26 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{virtus}
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Piotr Solnica"]
12
- s.date = %q{2011-07-10}
11
+ s.authors = [%q{Piotr Solnica}]
12
+ s.date = %q{2011-07-30}
13
13
  s.description = %q{Attributes for your plain ruby objects}
14
- s.email = ["piotr@rubyverse.com"]
14
+ s.email = [%q{piotr@rubyverse.com}]
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
17
- "README.markdown",
17
+ "README.md",
18
18
  "TODO"
19
19
  ]
20
20
  s.files = [
21
21
  ".rvmrc",
22
22
  ".travis.yml",
23
+ ".yardopts",
23
24
  "Gemfile",
24
- "History.txt",
25
+ "History.md",
25
26
  "LICENSE",
26
- "README.markdown",
27
+ "README.md",
27
28
  "Rakefile",
28
29
  "TODO",
29
30
  "VERSION",
@@ -32,6 +33,8 @@ Gem::Specification.new do |s|
32
33
  "config/roodi.yml",
33
34
  "config/site.reek",
34
35
  "config/yardstick.yml",
36
+ "examples/custom_coercion_spec.rb",
37
+ "examples/default_values_spec.rb",
35
38
  "lib/virtus.rb",
36
39
  "lib/virtus/attribute.rb",
37
40
  "lib/virtus/attribute/array.rb",
@@ -48,13 +51,26 @@ Gem::Specification.new do |s|
48
51
  "lib/virtus/attribute/time.rb",
49
52
  "lib/virtus/attribute_set.rb",
50
53
  "lib/virtus/class_methods.rb",
54
+ "lib/virtus/coercion.rb",
55
+ "lib/virtus/coercion/date.rb",
56
+ "lib/virtus/coercion/date_time.rb",
57
+ "lib/virtus/coercion/decimal.rb",
58
+ "lib/virtus/coercion/false_class.rb",
59
+ "lib/virtus/coercion/float.rb",
60
+ "lib/virtus/coercion/hash.rb",
61
+ "lib/virtus/coercion/integer.rb",
62
+ "lib/virtus/coercion/numeric.rb",
63
+ "lib/virtus/coercion/object.rb",
64
+ "lib/virtus/coercion/string.rb",
65
+ "lib/virtus/coercion/symbol.rb",
66
+ "lib/virtus/coercion/time.rb",
67
+ "lib/virtus/coercion/time_coercions.rb",
68
+ "lib/virtus/coercion/true_class.rb",
51
69
  "lib/virtus/instance_methods.rb",
52
70
  "lib/virtus/support/descendants_tracker.rb",
53
- "lib/virtus/typecast/boolean.rb",
54
- "lib/virtus/typecast/numeric.rb",
55
- "lib/virtus/typecast/string.rb",
56
- "lib/virtus/typecast/time.rb",
57
- "spec/integration/virtus/attributes/attribute/typecast_spec.rb",
71
+ "lib/virtus/support/options.rb",
72
+ "lib/virtus/support/type_lookup.rb",
73
+ "spec/integration/virtus/attributes/attribute/set_spec.rb",
58
74
  "spec/integration/virtus/class_methods/attribute_spec.rb",
59
75
  "spec/integration/virtus/class_methods/attributes_spec.rb",
60
76
  "spec/integration/virtus/class_methods/const_missing_spec.rb",
@@ -64,12 +80,11 @@ Gem::Specification.new do |s|
64
80
  "spec/unit/shared/attribute.rb",
65
81
  "spec/unit/shared/attribute/accept_options.rb",
66
82
  "spec/unit/shared/attribute/accepted_options.rb",
67
- "spec/unit/shared/attribute/complex.rb",
68
83
  "spec/unit/shared/attribute/get.rb",
69
- "spec/unit/shared/attribute/options.rb",
84
+ "spec/unit/shared/attribute/inspect.rb",
85
+ "spec/unit/shared/attribute/primitive.rb",
70
86
  "spec/unit/shared/attribute/set.rb",
71
87
  "spec/unit/virtus/attribute/array_spec.rb",
72
- "spec/unit/virtus/attribute/attribute_spec.rb",
73
88
  "spec/unit/virtus/attribute/boolean_spec.rb",
74
89
  "spec/unit/virtus/attribute/class_methods/determine_type_spec.rb",
75
90
  "spec/unit/virtus/attribute/date_spec.rb",
@@ -90,12 +105,50 @@ Gem::Specification.new do |s|
90
105
  "spec/unit/virtus/attribute_set/parent_spec.rb",
91
106
  "spec/unit/virtus/attribute_set/reset_spec.rb",
92
107
  "spec/unit/virtus/class_methods/attribute_spec.rb",
108
+ "spec/unit/virtus/class_methods/attributes_spec.rb",
93
109
  "spec/unit/virtus/class_methods/new_spec.rb",
110
+ "spec/unit/virtus/coercion/class_name_reference_spec.rb",
111
+ "spec/unit/virtus/coercion/date/class_methods/to_datetime_spec.rb",
112
+ "spec/unit/virtus/coercion/date/class_methods/to_string_spec.rb",
113
+ "spec/unit/virtus/coercion/date/class_methods/to_time_spec.rb",
114
+ "spec/unit/virtus/coercion/date_time/class_methods/to_date_spec.rb",
115
+ "spec/unit/virtus/coercion/date_time/class_methods/to_string_spec.rb",
116
+ "spec/unit/virtus/coercion/date_time/class_methods/to_time_spec.rb",
117
+ "spec/unit/virtus/coercion/decimal/class_methods/to_float_spec.rb",
118
+ "spec/unit/virtus/coercion/decimal/class_methods/to_integer_spec.rb",
119
+ "spec/unit/virtus/coercion/decimal/class_methods/to_string_spec.rb",
120
+ "spec/unit/virtus/coercion/false_class/class_methods/to_string_spec.rb",
121
+ "spec/unit/virtus/coercion/float/class_methods/to_decimal_spec.rb",
122
+ "spec/unit/virtus/coercion/float/class_methods/to_integer_spec.rb",
123
+ "spec/unit/virtus/coercion/float/class_methods/to_string_spec.rb",
124
+ "spec/unit/virtus/coercion/hash/class_methods/to_array_spec.rb",
125
+ "spec/unit/virtus/coercion/hash/class_methods/to_date_spec.rb",
126
+ "spec/unit/virtus/coercion/hash/class_methods/to_datetime_spec.rb",
127
+ "spec/unit/virtus/coercion/hash/class_methods/to_time_spec.rb",
128
+ "spec/unit/virtus/coercion/integer/class_methods/to_boolean_spec.rb",
129
+ "spec/unit/virtus/coercion/integer/class_methods/to_decimal_spec.rb",
130
+ "spec/unit/virtus/coercion/integer/class_methods/to_float_spec.rb",
131
+ "spec/unit/virtus/coercion/integer/class_methods/to_string_spec.rb",
132
+ "spec/unit/virtus/coercion/object/class_methods/method_missing_spec.rb",
133
+ "spec/unit/virtus/coercion/string/class_methods/to_boolean_spec.rb",
134
+ "spec/unit/virtus/coercion/string/class_methods/to_date_spec.rb",
135
+ "spec/unit/virtus/coercion/string/class_methods/to_datetime_spec.rb",
136
+ "spec/unit/virtus/coercion/string/class_methods/to_decimal_spec.rb",
137
+ "spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb",
138
+ "spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb",
139
+ "spec/unit/virtus/coercion/string/class_methods/to_time_spec.rb",
140
+ "spec/unit/virtus/coercion/symbol/class_methods/to_string_spec.rb",
141
+ "spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb",
94
142
  "spec/unit/virtus/descendants_tracker/add_descendant_spec.rb",
95
143
  "spec/unit/virtus/descendants_tracker/descendants_spec.rb",
96
144
  "spec/unit/virtus/instance_methods/attributes_spec.rb",
97
145
  "spec/unit/virtus/instance_methods/element_reference_spec.rb",
98
146
  "spec/unit/virtus/instance_methods/element_set_spec.rb",
147
+ "spec/unit/virtus/options/accept_options_spec.rb",
148
+ "spec/unit/virtus/options/accepted_options_spec.rb",
149
+ "spec/unit/virtus/options/options_spec.rb",
150
+ "spec/unit/virtus/type_lookup/determine_type_spec.rb",
151
+ "spec/unit/virtus/type_lookup/primitive_spec.rb",
99
152
  "tasks/metrics/ci.rake",
100
153
  "tasks/metrics/flay.rake",
101
154
  "tasks/metrics/flog.rake",
@@ -109,8 +162,8 @@ Gem::Specification.new do |s|
109
162
  "virtus.gemspec"
110
163
  ]
111
164
  s.homepage = %q{https://github.com/solnic/virtus}
112
- s.require_paths = ["lib"]
113
- s.rubygems_version = %q{1.6.2}
165
+ s.require_paths = [%q{lib}]
166
+ s.rubygems_version = %q{1.8.6}
114
167
  s.summary = %q{Attributes for your plain ruby objects}
115
168
 
116
169
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: virtus
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 5
10
- version: 0.0.5
9
+ - 6
10
+ version: 0.0.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Piotr Solnica
@@ -15,12 +15,12 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-10 00:00:00 +02:00
19
- default_executable:
18
+ date: 2011-07-30 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
21
+ name: backports
22
22
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
26
  - - ~>
@@ -32,11 +32,11 @@ dependencies:
32
32
  - 0
33
33
  version: 2.3.0
34
34
  type: :development
35
- name: backports
36
- version_requirements: *id001
35
+ requirement: *id001
37
36
  - !ruby/object:Gem::Dependency
37
+ name: jeweler
38
38
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -48,11 +48,11 @@ dependencies:
48
48
  - 4
49
49
  version: 1.6.4
50
50
  type: :development
51
- name: jeweler
52
- version_requirements: *id002
51
+ requirement: *id002
53
52
  - !ruby/object:Gem::Dependency
53
+ name: rspec
54
54
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
56
  none: false
57
57
  requirements:
58
58
  - - ~>
@@ -64,8 +64,7 @@ dependencies:
64
64
  - 0
65
65
  version: 2.6.0
66
66
  type: :development
67
- name: rspec
68
- version_requirements: *id003
67
+ requirement: *id003
69
68
  description: Attributes for your plain ruby objects
70
69
  email:
71
70
  - piotr@rubyverse.com
@@ -75,15 +74,16 @@ extensions: []
75
74
 
76
75
  extra_rdoc_files:
77
76
  - LICENSE
78
- - README.markdown
77
+ - README.md
79
78
  - TODO
80
79
  files:
81
80
  - .rvmrc
82
81
  - .travis.yml
82
+ - .yardopts
83
83
  - Gemfile
84
- - History.txt
84
+ - History.md
85
85
  - LICENSE
86
- - README.markdown
86
+ - README.md
87
87
  - Rakefile
88
88
  - TODO
89
89
  - VERSION
@@ -92,6 +92,8 @@ files:
92
92
  - config/roodi.yml
93
93
  - config/site.reek
94
94
  - config/yardstick.yml
95
+ - examples/custom_coercion_spec.rb
96
+ - examples/default_values_spec.rb
95
97
  - lib/virtus.rb
96
98
  - lib/virtus/attribute.rb
97
99
  - lib/virtus/attribute/array.rb
@@ -108,13 +110,26 @@ files:
108
110
  - lib/virtus/attribute/time.rb
109
111
  - lib/virtus/attribute_set.rb
110
112
  - lib/virtus/class_methods.rb
113
+ - lib/virtus/coercion.rb
114
+ - lib/virtus/coercion/date.rb
115
+ - lib/virtus/coercion/date_time.rb
116
+ - lib/virtus/coercion/decimal.rb
117
+ - lib/virtus/coercion/false_class.rb
118
+ - lib/virtus/coercion/float.rb
119
+ - lib/virtus/coercion/hash.rb
120
+ - lib/virtus/coercion/integer.rb
121
+ - lib/virtus/coercion/numeric.rb
122
+ - lib/virtus/coercion/object.rb
123
+ - lib/virtus/coercion/string.rb
124
+ - lib/virtus/coercion/symbol.rb
125
+ - lib/virtus/coercion/time.rb
126
+ - lib/virtus/coercion/time_coercions.rb
127
+ - lib/virtus/coercion/true_class.rb
111
128
  - lib/virtus/instance_methods.rb
112
129
  - lib/virtus/support/descendants_tracker.rb
113
- - lib/virtus/typecast/boolean.rb
114
- - lib/virtus/typecast/numeric.rb
115
- - lib/virtus/typecast/string.rb
116
- - lib/virtus/typecast/time.rb
117
- - spec/integration/virtus/attributes/attribute/typecast_spec.rb
130
+ - lib/virtus/support/options.rb
131
+ - lib/virtus/support/type_lookup.rb
132
+ - spec/integration/virtus/attributes/attribute/set_spec.rb
118
133
  - spec/integration/virtus/class_methods/attribute_spec.rb
119
134
  - spec/integration/virtus/class_methods/attributes_spec.rb
120
135
  - spec/integration/virtus/class_methods/const_missing_spec.rb
@@ -124,12 +139,11 @@ files:
124
139
  - spec/unit/shared/attribute.rb
125
140
  - spec/unit/shared/attribute/accept_options.rb
126
141
  - spec/unit/shared/attribute/accepted_options.rb
127
- - spec/unit/shared/attribute/complex.rb
128
142
  - spec/unit/shared/attribute/get.rb
129
- - spec/unit/shared/attribute/options.rb
143
+ - spec/unit/shared/attribute/inspect.rb
144
+ - spec/unit/shared/attribute/primitive.rb
130
145
  - spec/unit/shared/attribute/set.rb
131
146
  - spec/unit/virtus/attribute/array_spec.rb
132
- - spec/unit/virtus/attribute/attribute_spec.rb
133
147
  - spec/unit/virtus/attribute/boolean_spec.rb
134
148
  - spec/unit/virtus/attribute/class_methods/determine_type_spec.rb
135
149
  - spec/unit/virtus/attribute/date_spec.rb
@@ -150,12 +164,50 @@ files:
150
164
  - spec/unit/virtus/attribute_set/parent_spec.rb
151
165
  - spec/unit/virtus/attribute_set/reset_spec.rb
152
166
  - spec/unit/virtus/class_methods/attribute_spec.rb
167
+ - spec/unit/virtus/class_methods/attributes_spec.rb
153
168
  - spec/unit/virtus/class_methods/new_spec.rb
169
+ - spec/unit/virtus/coercion/class_name_reference_spec.rb
170
+ - spec/unit/virtus/coercion/date/class_methods/to_datetime_spec.rb
171
+ - spec/unit/virtus/coercion/date/class_methods/to_string_spec.rb
172
+ - spec/unit/virtus/coercion/date/class_methods/to_time_spec.rb
173
+ - spec/unit/virtus/coercion/date_time/class_methods/to_date_spec.rb
174
+ - spec/unit/virtus/coercion/date_time/class_methods/to_string_spec.rb
175
+ - spec/unit/virtus/coercion/date_time/class_methods/to_time_spec.rb
176
+ - spec/unit/virtus/coercion/decimal/class_methods/to_float_spec.rb
177
+ - spec/unit/virtus/coercion/decimal/class_methods/to_integer_spec.rb
178
+ - spec/unit/virtus/coercion/decimal/class_methods/to_string_spec.rb
179
+ - spec/unit/virtus/coercion/false_class/class_methods/to_string_spec.rb
180
+ - spec/unit/virtus/coercion/float/class_methods/to_decimal_spec.rb
181
+ - spec/unit/virtus/coercion/float/class_methods/to_integer_spec.rb
182
+ - spec/unit/virtus/coercion/float/class_methods/to_string_spec.rb
183
+ - spec/unit/virtus/coercion/hash/class_methods/to_array_spec.rb
184
+ - spec/unit/virtus/coercion/hash/class_methods/to_date_spec.rb
185
+ - spec/unit/virtus/coercion/hash/class_methods/to_datetime_spec.rb
186
+ - spec/unit/virtus/coercion/hash/class_methods/to_time_spec.rb
187
+ - spec/unit/virtus/coercion/integer/class_methods/to_boolean_spec.rb
188
+ - spec/unit/virtus/coercion/integer/class_methods/to_decimal_spec.rb
189
+ - spec/unit/virtus/coercion/integer/class_methods/to_float_spec.rb
190
+ - spec/unit/virtus/coercion/integer/class_methods/to_string_spec.rb
191
+ - spec/unit/virtus/coercion/object/class_methods/method_missing_spec.rb
192
+ - spec/unit/virtus/coercion/string/class_methods/to_boolean_spec.rb
193
+ - spec/unit/virtus/coercion/string/class_methods/to_date_spec.rb
194
+ - spec/unit/virtus/coercion/string/class_methods/to_datetime_spec.rb
195
+ - spec/unit/virtus/coercion/string/class_methods/to_decimal_spec.rb
196
+ - spec/unit/virtus/coercion/string/class_methods/to_float_spec.rb
197
+ - spec/unit/virtus/coercion/string/class_methods/to_integer_spec.rb
198
+ - spec/unit/virtus/coercion/string/class_methods/to_time_spec.rb
199
+ - spec/unit/virtus/coercion/symbol/class_methods/to_string_spec.rb
200
+ - spec/unit/virtus/coercion/true_class/class_methods/to_string_spec.rb
154
201
  - spec/unit/virtus/descendants_tracker/add_descendant_spec.rb
155
202
  - spec/unit/virtus/descendants_tracker/descendants_spec.rb
156
203
  - spec/unit/virtus/instance_methods/attributes_spec.rb
157
204
  - spec/unit/virtus/instance_methods/element_reference_spec.rb
158
205
  - spec/unit/virtus/instance_methods/element_set_spec.rb
206
+ - spec/unit/virtus/options/accept_options_spec.rb
207
+ - spec/unit/virtus/options/accepted_options_spec.rb
208
+ - spec/unit/virtus/options/options_spec.rb
209
+ - spec/unit/virtus/type_lookup/determine_type_spec.rb
210
+ - spec/unit/virtus/type_lookup/primitive_spec.rb
159
211
  - tasks/metrics/ci.rake
160
212
  - tasks/metrics/flay.rake
161
213
  - tasks/metrics/flog.rake
@@ -167,7 +219,6 @@ files:
167
219
  - tasks/spec.rake
168
220
  - tasks/yard.rake
169
221
  - virtus.gemspec
170
- has_rdoc: true
171
222
  homepage: https://github.com/solnic/virtus
172
223
  licenses: []
173
224
 
@@ -197,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
248
  requirements: []
198
249
 
199
250
  rubyforge_project:
200
- rubygems_version: 1.6.2
251
+ rubygems_version: 1.8.6
201
252
  signing_key:
202
253
  specification_version: 3
203
254
  summary: Attributes for your plain ruby objects
data/History.txt DELETED
@@ -1,38 +0,0 @@
1
- === v0.0.5 to-be-released
2
-
3
- Details: https://github.com/solnic/virtus/compare/v0.0.4...master
4
-
5
- * [BREAKING CHANGE] Moved Virtus.determine_type to Virtus::Attribute.determine_type (dkubb)
6
- * [general] Added backports as a development dependency (dkubb)
7
-
8
- === v0.0.4 2011-07-08
9
-
10
- * [BREAKING CHANGE] attributes hash has been replaced by a specialized class AttributeSet (dkubb)
11
- * [BREAKING CHANGE] Virtus::ClassMethods.attribute returns self instead of a created attribute
12
- * [changed] descendants tracking has been extracted into DescendantsTracker module (dkubb)
13
- * [changed] Instance #primitive? method has been replaced by class utility method Virtus::Attribute.primitive?
14
- * [changed] Virtus::Attribute::String#typecast_to_primitive delegates to Virtus::Typecast::String.call
15
-
16
- Details: https://github.com/solnic/virtus/compare/v0.0.3...v0.0.4
17
-
18
- === v0.0.3 2011-06-09
19
-
20
- * [BREAKING CHANGE] Attribute classes were moved to Virtus::Attribute namespace
21
- * [BREAKING CHANGE] Attribute instance no longer holds the reference to a model
22
- * [BREAKING CHANGE] #typecast no longer receives an instance of a model (override #set which calls #typecast if you need that)
23
- * [changed] Adding reader/writer methods was moved from the attribute constructor to Virtus::ClassMethods.attribute
24
- * [changed] Typecast logic has been moved into separate classes (see Virtus::Typecast)
25
- * [added] Virtus::Attribute::DateTime#typecast supports objects which implement #to_datetime
26
- * [general] Internals have been cleaned up, simplified and properly documented
27
-
28
- Details: https://github.com/solnic/virtus/compare/v0.0.2...v0.0.3
29
-
30
- === v0.0.2 2011-06-06
31
-
32
- * [bugfix] Fixed #typecast in custom attribute classes
33
-
34
- Details: https://github.com/solnic/virtus/compare/v0.0.1...v0.0.2
35
-
36
- === v0.0.1 2011-06-04
37
-
38
- First public release :)
@@ -1,29 +0,0 @@
1
- module Virtus
2
- module Typecast
3
-
4
- # Typecast defined values into true or false.
5
- # See TRUE_VALUES and FALSE_VALUES constants for a reference.
6
- class Boolean
7
-
8
- TRUE_VALUES = %w[ 1 t true ].freeze
9
- FALSE_VALUES = %w[ 0 f false ].freeze
10
- BOOLEAN_MAP = Hash[ TRUE_VALUES.product([ true ]) + FALSE_VALUES.product([ false ]) ].freeze
11
-
12
- # Typecast value to TrueClass or FalseClass
13
- #
14
- # @example
15
- # Virtus::Typecast::Boolean.call('T') # => true
16
- # Virtus::Typecast::Boolean.call('F') # => false
17
- #
18
- # @param [#to_s]
19
- #
20
- # @return [Boolean]
21
- #
22
- # @api public
23
- def self.call(value)
24
- BOOLEAN_MAP.fetch(value.to_s.downcase, value)
25
- end
26
-
27
- end # class Boolean
28
- end # module Typecast
29
- end # module Virtus
@@ -1,87 +0,0 @@
1
- module Virtus
2
- module Typecast
3
-
4
- # Typecast numeric values. Supports Integer, Float and BigDecimal
5
- class Numeric
6
-
7
- REGEXP = /\A(-?(?:0|[1-9]\d*)(?:\.\d+)?|(?:\.\d+))\z/.freeze
8
-
9
- # Typecast value to integer
10
- #
11
- # @example
12
- # Virtus::Typecast::Numeric.to_i('1') # => 1
13
- # Virtus::Typecast::Numeric.to_i(1.2) # => 1
14
- #
15
- # @param [Object] value
16
- #
17
- # @return [Integer]
18
- #
19
- # @api public
20
- def self.to_i(value)
21
- call(value, :to_i)
22
- end
23
-
24
- # Typecast value to float
25
- #
26
- # @example
27
- # Virtus::Typecast::Numeric.to_f('1.2') # => 1.2
28
- # Virtus::Typecast::Numeric.to_f(1) # => 1.0
29
- #
30
- # @param [Object] value
31
- #
32
- # @return [Float]
33
- #
34
- # @api public
35
- def self.to_f(value)
36
- call(value, :to_f)
37
- end
38
-
39
- # Typecast value to decimal
40
- #
41
- # @example
42
- # Virtus::Typecast::Numeric.to_d('1.2') # => #<BigDecimal:b72157d4,'0.12E1',8(8)>
43
- # Virtus::Typecast::Numeric.to_d(1) # => #<BigDecimal:b7212e08,'0.1E1',4(8)>
44
- #
45
- # @param [Object] value
46
- #
47
- # @return [BigDecimal]
48
- #
49
- # @api public
50
- def self.to_d(value)
51
- if value.kind_of?(::Integer)
52
- value.to_s.to_d
53
- else
54
- call(value, :to_d)
55
- end
56
- end
57
-
58
- # Match numeric string
59
- #
60
- # @param [#to_str, Numeric] value
61
- # value to typecast
62
- # @param [Symbol] method
63
- # method to typecast with
64
- #
65
- # @return [Numeric]
66
- # number if matched, value if no match
67
- #
68
- # @api private
69
- def self.call(value, method)
70
- if value.respond_to?(:to_str)
71
- if value.to_str =~ REGEXP
72
- $1.send(method)
73
- else
74
- value
75
- end
76
- elsif value.respond_to?(method)
77
- value.send(method)
78
- else
79
- value
80
- end
81
- end
82
-
83
- private_class_method :call
84
-
85
- end # class Numeric
86
- end # module Typecast
87
- end # module Virtus