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