value-object 0.1.1 → 0.1.2

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 (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