project_store 0.4.2 → 0.5.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: 3087678934a7bcf33d6b0e576c6a5b29a558868e
4
- data.tar.gz: ce257a82ced7c0f41f97f551c9adf816205d7def
3
+ metadata.gz: 4561e136b9e24e46b8abb3d6d33b1edc06c65695
4
+ data.tar.gz: c499df5410a88f825c4c57392077d2c661585ae0
5
5
  SHA512:
6
- metadata.gz: 143916329af9dd885edde500aa03986471580bb6f0e62a09a2b0430e27f938ea6da76b63253c41aab3782cdb235ed640d4cad704e39147814841a2c9921f612c
7
- data.tar.gz: 2aff9a7266cb832348434d60a9af33772d1c96f31e103cd708d1d2a0b7accfc587ecd7984f9cd6659bd49d2f8c6c52965f0b78fa42f4f2e730c01ae39364a583
6
+ metadata.gz: 06bd6c5c3c74686ba3f2ccf5e01ae55baf0b473993d2e02577dbba9edbcc673f928a296b10c92655285aac05792a2adf66614e27276aa1d2d4d32666b66bdb55
7
+ data.tar.gz: 73cdbbc014d770edf8579be0be803f1bf170da9aa768c5edd15142bc199c385464ff7cbd01518439ac3e0aefcfb5782ec48f6101508072afe7dc91440d948af5
@@ -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, :decorators
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
- @continue_on_error = false
17
+ self.continue_on_error = false
17
18
  @project_entities = {}
18
19
  @stores = {}
19
20
  @entity_types = {}
20
- @decorators = {}
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
- add_and_index_entity entity, store, entity_name
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 add_and_index_entity(entity, store, entity_name)
61
- entity.extend ProjectStore::Entity::Base
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 @backing_store
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
- ProjectStore.logger.info "Saving '#{name}' into '#{backing_store.path}'"
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
@@ -1,3 +1,3 @@
1
1
  module ProjectStore
2
- VERSION = '0.4.2'
2
+ VERSION = '0.5.0'
3
3
  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.2
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-19 00:00:00.000000000 Z
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