project_store 0.4.2 → 0.5.0
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.
- checksums.yaml +4 -4
- data/lib/project_store/base.rb +13 -29
- data/lib/project_store/entity/base.rb +7 -2
- data/lib/project_store/entity/builder.rb +39 -0
- data/lib/project_store/version.rb +1 -1
- data/lib/project_store.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4561e136b9e24e46b8abb3d6d33b1edc06c65695
|
4
|
+
data.tar.gz: c499df5410a88f825c4c57392077d2c661585ae0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 06bd6c5c3c74686ba3f2ccf5e01ae55baf0b473993d2e02577dbba9edbcc673f928a296b10c92655285aac05792a2adf66614e27276aa1d2d4d32666b66bdb55
|
7
|
+
data.tar.gz: 73cdbbc014d770edf8579be0be803f1bf170da9aa768c5edd15142bc199c385464ff7cbd01518439ac3e0aefcfb5782ec48f6101508072afe7dc91440d948af5
|
data/lib/project_store/base.rb
CHANGED
@@ -4,20 +4,21 @@ module ProjectStore
|
|
4
4
|
|
5
5
|
class Base
|
6
6
|
|
7
|
+
include ProjectStore::Entity::Builder
|
7
8
|
include ProjectStore::Editing
|
8
9
|
|
9
|
-
attr_accessor :continue_on_error
|
10
|
+
attr_accessor :continue_on_error
|
10
11
|
attr_reader :path, :project_entities, :entity_types, :stores, :logger
|
11
12
|
|
12
13
|
def initialize(path)
|
13
14
|
raise PSE, "Invalid store path '#{path}'!" unless valid_path? path
|
14
15
|
@logger = ProjectStore.logger
|
15
16
|
@path = File.expand_path path
|
16
|
-
|
17
|
+
self.continue_on_error = false
|
17
18
|
@project_entities = {}
|
18
19
|
@stores = {}
|
19
20
|
@entity_types = {}
|
20
|
-
|
21
|
+
self.decorators = {}
|
21
22
|
end
|
22
23
|
|
23
24
|
def load_entities
|
@@ -31,7 +32,7 @@ module ProjectStore
|
|
31
32
|
begin
|
32
33
|
logger.debug "Loading '#{entity_name}' entity."
|
33
34
|
entity = store[entity_name]
|
34
|
-
|
35
|
+
decorate_and_index_entity entity_name, entity, store
|
35
36
|
rescue => e
|
36
37
|
if continue_on_error
|
37
38
|
logger.error "Invalid entity of type '#{entity_name}' in file '#{file}'"
|
@@ -51,23 +52,23 @@ module ProjectStore
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
55
|
+
|
54
56
|
private
|
55
57
|
|
56
58
|
def valid_path?(path)
|
57
59
|
Dir.exist? path and File.readable? path and File.writable? path
|
58
60
|
end
|
59
61
|
|
60
|
-
def
|
61
|
-
entity
|
62
|
-
entity.name = entity_name
|
63
|
-
entity.basic_checks
|
64
|
-
logger.info "Found '#{entity.name}' of type '#{entity.type}'."
|
65
|
-
raise PSE, "Entity '#{entity.name}' already defined in file '#{project_entities[entity.name].backing_store.path}'" if project_entities[entity.name]
|
66
|
-
# Adds extra decorator
|
67
|
-
add_decorators entity
|
62
|
+
def decorate_and_index_entity(entity_name, entity, store)
|
63
|
+
setup_entity! entity_name, entity
|
68
64
|
# Re-check the validity of the object now that it has been decorated
|
69
65
|
entity.valid?(raise_exception: true)
|
66
|
+
index_entity(entity, store)
|
67
|
+
end
|
68
|
+
|
69
|
+
def index_entity(entity, store)
|
70
70
|
entity.backing_store = store
|
71
|
+
raise PSE, "Entity '#{entity.name}' already defined in file '#{project_entities[entity.name].backing_store.path}'" if project_entities[entity.name]
|
71
72
|
# Add to the store index store -> entity list
|
72
73
|
stores[store] << entity
|
73
74
|
# Add to main hash entity name -> entity
|
@@ -78,23 +79,6 @@ module ProjectStore
|
|
78
79
|
end
|
79
80
|
|
80
81
|
|
81
|
-
def add_decorators(entity)
|
82
|
-
[:_default, entity.type].each do |decorators_key|
|
83
|
-
case decorators[decorators_key]
|
84
|
-
when Array
|
85
|
-
decorators[decorators_key]
|
86
|
-
when NilClass
|
87
|
-
[]
|
88
|
-
else
|
89
|
-
[decorators[decorators_key]]
|
90
|
-
end .each do |decorator|
|
91
|
-
entity.extend decorator
|
92
|
-
entity.mandatory_properties.concat decorator.mandatory_properties if decorator.respond_to? :mandatory_properties
|
93
|
-
logger.debug "Decorated entity '#{entity.name}' with '#{decorator}'"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
82
|
end
|
99
83
|
|
100
84
|
|
@@ -8,12 +8,17 @@ module ProjectStore
|
|
8
8
|
attr_reader :backing_store
|
9
9
|
|
10
10
|
def backing_store=(store)
|
11
|
-
raise PSE, 'Cannot change the store for an entity' if
|
11
|
+
raise PSE, 'Cannot change the store for an entity' if backing_store
|
12
12
|
@backing_store = store
|
13
13
|
end
|
14
14
|
|
15
15
|
def save
|
16
|
-
|
16
|
+
if backing_store.nil?
|
17
|
+
ProjectStore.logger.warn "No backing store specified for '#{name}'. Not saved!"
|
18
|
+
return false
|
19
|
+
end
|
20
|
+
valid? raise_exception: true
|
21
|
+
ProjectStore.logger.debug "Saving '#{name}' into '#{backing_store.path}'"
|
17
22
|
backing_store.transaction do
|
18
23
|
backing_store[name] = self
|
19
24
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module ProjectStore
|
2
|
+
module Entity
|
3
|
+
|
4
|
+
module Builder
|
5
|
+
|
6
|
+
attr_accessor :decorators
|
7
|
+
|
8
|
+
def setup_entity!(entity_name, entity = {}, entity_type = nil)
|
9
|
+
entity.extend ProjectStore::Entity::Base
|
10
|
+
entity.name = entity_name
|
11
|
+
entity.type = entity_type unless entity_type.nil?
|
12
|
+
entity.basic_checks
|
13
|
+
ProjectStore.logger.info "New entity '#{entity.name}' of type '#{entity.type}'."
|
14
|
+
# Adds extra decorator
|
15
|
+
add_decorators entity
|
16
|
+
entity
|
17
|
+
end
|
18
|
+
|
19
|
+
def add_decorators(entity)
|
20
|
+
[:_default, entity.type].each do |decorator_name|
|
21
|
+
case decorators[decorator_name]
|
22
|
+
when Array
|
23
|
+
decorators[decorator_name]
|
24
|
+
when NilClass
|
25
|
+
[]
|
26
|
+
else
|
27
|
+
[decorators[decorator_name]]
|
28
|
+
end .each do |decorator|
|
29
|
+
entity.extend decorator
|
30
|
+
entity.mandatory_properties.concat decorator.mandatory_properties if decorator.respond_to? :mandatory_properties
|
31
|
+
ProjectStore.logger.debug "Decorated entity '#{entity.name}' with '#{decorator}'"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
data/lib/project_store.rb
CHANGED
@@ -16,5 +16,6 @@ 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'
|
19
|
+
require 'project_store/entity/builder'
|
19
20
|
require 'project_store/editing'
|
20
21
|
require 'project_store/base'
|
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.
|
4
|
+
version: 0.5.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-
|
11
|
+
date: 2016-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- lib/project_store/base.rb
|
88
88
|
- lib/project_store/editing.rb
|
89
89
|
- lib/project_store/entity/base.rb
|
90
|
+
- lib/project_store/entity/builder.rb
|
90
91
|
- lib/project_store/entity/common_properties.rb
|
91
92
|
- lib/project_store/entity/mandatory_properties.rb
|
92
93
|
- lib/project_store/entity/property_binder.rb
|