project_store 0.3.3 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c2e72891eb775947a8f1c05d3497a27bbb6dbc2
4
- data.tar.gz: 158ffc592cbd96c26a32b68c6e879bfead9d8859
3
+ metadata.gz: 050ec32cc6b6e2ead81816487f0ee4abd535336c
4
+ data.tar.gz: e5badf7ed14f1de29c4eae3cd9c6b384678f16cf
5
5
  SHA512:
6
- metadata.gz: 87398cace0fc49f20fed9e7621c28931f824582050f9c19b8e9500101cf2bfcad238a69413fd09d1aa82ee0d226e39cbef8c3804d03e4dc3156fce6270f1fa2d
7
- data.tar.gz: 5965f8f86736626cb19591e6e2c0cc65565956649429619a086c52ef53d879ecbdf9377b4541bc9bcce464b7ce0553698e8f8d9517b22a477616ddcd7fe648c7
6
+ metadata.gz: e3193091b55fb7133b968e46abe5b7ae065521106d1a3956a06b005a028da53a9e4e930917410a1e85bf3b374d7e65daea5a36793c4b37793930265c5c150c86
7
+ data.tar.gz: 89495629dcd16bdb23b43181d5ce48df9b84102195476db86d85b1f67a3c174f3e93b740f829a59b24627c770b644d9c0083cbe6929911ceeda758335ac43563
data/lib/project_store.rb CHANGED
@@ -12,7 +12,7 @@ module ProjectStore
12
12
 
13
13
  end
14
14
 
15
- require 'project_store/entity/properties_binder'
15
+ require 'project_store/entity/property_binder'
16
16
  require 'project_store/entity/mandatory_properties'
17
17
  require 'project_store/entity/common_properties'
18
18
  require 'project_store/entity/base'
@@ -65,6 +65,8 @@ module ProjectStore
65
65
  raise PSE, "Entity '#{entity.name}' already defined in file '#{project_entities[entity.name].backing_store.path}'" if project_entities[entity.name]
66
66
  # Adds extra decorator
67
67
  add_decorators entity
68
+ # Re-check the validity of the object now that it has been decorated
69
+ entity.valid?(raise_exception: true)
68
70
  entity.backing_store = store
69
71
  # Add to the store index store -> entity list
70
72
  stores[store] << entity
@@ -87,6 +89,7 @@ module ProjectStore
87
89
  [decorators[decorators_key]]
88
90
  end .each do |decorator|
89
91
  entity.extend decorator
92
+ entity.mandatory_properties.concat decorator.mandatory_properties
90
93
  logger.debug "Decorated entity '#{entity.name}' with '#{decorator}'"
91
94
  end
92
95
  end
@@ -19,15 +19,28 @@ module ProjectStore
19
19
  end
20
20
  end
21
21
 
22
+ def valid?(raise_exception: false)
23
+ mandatory_properties.each do |mandatory_property|
24
+ unless self[mandatory_property]
25
+ raise_exception ? raise(PSE, "Invalid entity '#{name}'. Missing '#{mandatory_property}' property") : false
26
+ end
27
+ end
28
+ true
29
+ end
30
+
31
+ def mandatory_properties
32
+ @mandatory_properties ||= [:type]
33
+ end
22
34
 
23
35
  def basic_checks
24
36
  raise PSE, 'Invalid entity. Missing name' unless name
25
37
  raise PSE, 'Invalid entity. You should not specify a name as it would not be taken in account' if self[:name]
26
- raise PSE, "Invalid entity '#{name}'. Missing type" unless type
27
- raise PSE, "Invalid entity '#{name}'. Forbidden 'backing_store' entry" if self[:backing_store]
28
- raise PSE, "Invalid entity '#{name}'. Forbidden 'basic_checks' entry" if self[:basic_checks]
29
- raise PSE, "Invalid entity '#{name}'. Forbidden 'save' entry" if self[:save]
30
- raise PSE, "Invalid entity '#{name}'. Forbidden 'internal_type' entry" if self[:internal_type]
38
+
39
+ [:backing_store, :basic_checks, :save, :internal_type, :mandatory_properties, :valid?].each do |forbidden_name|
40
+ raise PSE, "Invalid entity '#{name}'. Forbidden '#{forbidden_name}' property" if self[forbidden_name]
41
+ end
42
+
43
+ valid?(raise_exception: true)
31
44
  end
32
45
 
33
46
  end
@@ -0,0 +1,48 @@
1
+ module ProjectStore
2
+ module Entity
3
+
4
+ module PropertyBinder
5
+
6
+ def yaml_accessor(*yaml_properties)
7
+ yaml_properties.each do |yaml_property|
8
+ yaml_reader yaml_property
9
+ yaml_writer yaml_property
10
+ end
11
+ end
12
+
13
+ def yaml_reader(*yaml_properties)
14
+ yaml_properties.each do |yaml_property|
15
+ self.class_eval do
16
+ define_method yaml_property do
17
+ self[yaml_property]
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ def yaml_writer(*yaml_properties)
24
+ yaml_properties.each do |yaml_property|
25
+ self.class_eval do
26
+ define_method "#{yaml_property}=" do |val|
27
+ self[yaml_property] = val
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ def mandatory_properties
34
+ @mandatory_properties ||= []
35
+ end
36
+
37
+ def mandatory_property(*properties)
38
+ properties.each do |property|
39
+ mandatory_properties << property
40
+ end
41
+ end
42
+
43
+
44
+
45
+ end
46
+
47
+ end
48
+ end
@@ -1,3 +1,3 @@
1
1
  module ProjectStore
2
- VERSION = '0.3.3'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: project_store
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Laurent B.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-16 00:00:00.000000000 Z
11
+ date: 2016-07-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -89,7 +89,7 @@ files:
89
89
  - lib/project_store/entity/base.rb
90
90
  - lib/project_store/entity/common_properties.rb
91
91
  - lib/project_store/entity/mandatory_properties.rb
92
- - lib/project_store/entity/properties_binder.rb
92
+ - lib/project_store/entity/property_binder.rb
93
93
  - lib/project_store/error.rb
94
94
  - lib/project_store/initializer.rb
95
95
  - lib/project_store/utils/basic_logger.rb
@@ -1,36 +0,0 @@
1
- module ProjectStore
2
- module Entity
3
-
4
- module PropertyBinder
5
-
6
- def yaml_accessor(*args)
7
- args.each do |arg|
8
- yaml_reader arg
9
- yaml_writer arg
10
- end
11
- end
12
-
13
- def yaml_reader(*args)
14
- args.each do |arg|
15
- self.class_eval do
16
- define_method arg do
17
- self[arg]
18
- end
19
- end
20
- end
21
- end
22
-
23
- def yaml_writer(*args)
24
- args.each do |arg|
25
- self.class_eval do
26
- define_method "#{arg}=" do |val|
27
- self[arg] = val
28
- end
29
- end
30
- end
31
- end
32
-
33
- end
34
-
35
- end
36
- end