value-object 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/value_object.rb +27 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9373efde817511fa8a30b623ea789b78b1a852cf
|
4
|
+
data.tar.gz: 2f5e72765b85b68424d603d6ffc487a8b82496a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc966d9b10c13f4128db83b00f59f4e9c54f9e9bfad56730d7c1710ceae254430cddd8905afa4325c0db9a85b1bafa3e8388e8f50d22fd3c0d2aed9a83baf1d8
|
7
|
+
data.tar.gz: f0a5ef641deee90d9bc2e622d9c0708448639ee747e48071ad8b64e21506d276377b8fe78c989fa91955f91a223a46c06ba68600fb43822a5a797a068082a51f
|
data/lib/value_object.rb
CHANGED
@@ -7,7 +7,22 @@ module ValueObject
|
|
7
7
|
define_method(:check_invariants) do
|
8
8
|
end
|
9
9
|
|
10
|
+
define_method(:check_fields_are_initialized) do |values|
|
11
|
+
fields_number = names.length
|
12
|
+
arguments_number = values.length
|
13
|
+
|
14
|
+
raise WrongNumberOfArguments.new(fields_number, arguments_number) unless fields_number == arguments_number
|
15
|
+
|
16
|
+
uninitialized_fields = names.zip(values).select { |name, value| value.nil? }
|
17
|
+
uninitialized_fields_names = uninitialized_fields.map { |field| field.first }
|
18
|
+
|
19
|
+
raise FieldWithoutValue.new(uninitialized_fields_names) unless uninitialized_fields.empty?
|
20
|
+
end
|
21
|
+
private(:check_fields_are_initialized)
|
22
|
+
|
10
23
|
define_method(:initialize) do |*values|
|
24
|
+
check_fields_are_initialized values
|
25
|
+
|
11
26
|
names.zip(values) do |name, value|
|
12
27
|
instance_variable_set(:"@#{name}", value)
|
13
28
|
end
|
@@ -67,4 +82,16 @@ module ValueObject
|
|
67
82
|
super "At least one field must be declared"
|
68
83
|
end
|
69
84
|
end
|
85
|
+
|
86
|
+
class FieldWithoutValue < Exception
|
87
|
+
def initialize(fields)
|
88
|
+
super "Declared fields #{fields} must have value"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
class WrongNumberOfArguments < Exception
|
93
|
+
def initialize fields_number, arguments_number
|
94
|
+
super "Declared #{fields_number} fields but passing #{arguments_number}"
|
95
|
+
end
|
96
|
+
end
|
70
97
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: value-object
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- No Flop Squad
|
@@ -9,7 +9,21 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2015-08-31 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.0'
|
13
27
|
description: ''
|
14
28
|
email: noflopsquad@gmail.com
|
15
29
|
executables: []
|
@@ -37,7 +51,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
51
|
version: '0'
|
38
52
|
requirements: []
|
39
53
|
rubyforge_project:
|
40
|
-
rubygems_version: 2.4.
|
54
|
+
rubygems_version: 2.4.6
|
41
55
|
signing_key:
|
42
56
|
specification_version: 4
|
43
57
|
summary: A simple module to provide value objects semantics to a class
|