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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/value_object.rb +27 -0
  3. metadata +17 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13bfccbeb7b30bf8d13f87c0597c445f939f02c3
4
- data.tar.gz: 366283b9ea1557919e0bbbec8ac983c609a367d9
3
+ metadata.gz: 9373efde817511fa8a30b623ea789b78b1a852cf
4
+ data.tar.gz: 2f5e72765b85b68424d603d6ffc487a8b82496a5
5
5
  SHA512:
6
- metadata.gz: 5d956e744a6b4fa43b9a134d9e6fcca9d9450be9c2c7f5005ce8b99b3c72c9468e5ba9724f4febd792a7f16551b1fbcd70814e2b21b904c5f1d301ef9637d50c
7
- data.tar.gz: db4d7d006abf99c3e0961a6b32df5316fe0db82721c33739de9d69ced6875af88453038646c66f6c4cd94e14ce5d33b7fdaf09302aa57af4a37d8434d499ccd9
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.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.8
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