universe_compiler 0.3.3 → 0.3.4
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 703e444fd84e095b79e09bc5dea6e2a4690950c4
|
4
|
+
data.tar.gz: ad94bfaacc67708722298fb3e10a4d4988d84975
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 916ae17c012bfcb90660c7690e2adc86bde93d7cebdcfb8684635d0d7170dd3d4328f3c9b21f372e1aa2f5e35a972d669602bf2325581acfe478c4427cbd3921
|
7
|
+
data.tar.gz: 4d4e1acf886009371248702e18eaeac34299e8ddb7a65b3be430b60e91dc686c71ccb0cf59df35405c186729f0979e0417832a839ca12f2137a289ae1a3fd698
|
@@ -3,21 +3,6 @@ module UniverseCompiler
|
|
3
3
|
|
4
4
|
module FieldManagement
|
5
5
|
|
6
|
-
attr_accessor :auto_create_fields
|
7
|
-
|
8
|
-
def method_missing(method_name, *args)
|
9
|
-
if auto_create_fields
|
10
|
-
candidate_field_name = method_name
|
11
|
-
method_name.to_s.match (/^(?<field_name>[^=]+)\s*=?$/) do |md|
|
12
|
-
candidate_field_name = md['field_name'].to_sym
|
13
|
-
end
|
14
|
-
define_field_accessor candidate_field_name
|
15
|
-
raise "Invalid method '#{method_name}' in #{self}" unless self.respond_to? method_name
|
16
|
-
self.send method_name, *args
|
17
|
-
else
|
18
|
-
super(method_name, *args)
|
19
|
-
end
|
20
|
-
end
|
21
6
|
|
22
7
|
private
|
23
8
|
|
@@ -33,10 +33,45 @@ module UniverseCompiler
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def delete(entity)
|
36
|
+
# Remove references to entity
|
37
|
+
entities.each do |e|
|
38
|
+
e.class.fields_constraints.each do |field_name, constraints|
|
39
|
+
if constraints.keys.include? :has_one
|
40
|
+
e[field_name] = nil if e[field_name] == entity
|
41
|
+
end
|
42
|
+
if constraints.keys.include? :has_many
|
43
|
+
e[field_name].delete entity if e[field_name].include? entity
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
# Then delete the entity
|
36
48
|
entities.delete entity
|
37
49
|
reindex_all entities
|
38
50
|
end
|
39
51
|
|
52
|
+
def replace(entity, by)
|
53
|
+
raise UniverseCompiler::Error, "Wrong type, cannot replace '#{entity.as_path}' by '#{by.as_path}' !" unless entity.type == by.type
|
54
|
+
raise UniverseCompiler::Error, "Cannot replace '#{entity.as_path}' with '#{by.as_path}' which is alreadyin the universe!" if entity.universe == by.universe
|
55
|
+
|
56
|
+
# Change references to entity
|
57
|
+
entities.each do |e|
|
58
|
+
e.class.fields_constraints.each do |field_name, constraints|
|
59
|
+
if constraints.keys.include? :has_one
|
60
|
+
e[field_name] = by if e[field_name] == entity
|
61
|
+
end
|
62
|
+
if constraints.keys.include? :has_many
|
63
|
+
if e[field_name].map! do |entity_list_item|
|
64
|
+
(entity == entity_list_item) ? by : entity_list_item
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
# Then replace the entity
|
71
|
+
entities[entities.index(entity)] = by
|
72
|
+
reindex_all entities
|
73
|
+
end
|
74
|
+
|
40
75
|
def clear
|
41
76
|
entities.clear
|
42
77
|
clear_indices
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
1
3
|
module UniverseCompiler
|
2
4
|
module Universe
|
3
5
|
|
@@ -15,26 +17,17 @@ module UniverseCompiler
|
|
15
17
|
end
|
16
18
|
|
17
19
|
def get_unique_name(seed = DEFAULT_UNIVERSE_NAME)
|
18
|
-
|
19
|
-
|
20
|
-
universe_name.match /^#{seed}(?:(?: - #)(?<index>\d+))?$/ do |md|
|
21
|
-
index = md['index'] || '1'
|
22
|
-
index = index.to_i
|
23
|
-
max_index = index > max_index ? index : max_index
|
24
|
-
end
|
25
|
-
end
|
26
|
-
if max_index == 1
|
27
|
-
seed
|
20
|
+
if universes[seed]
|
21
|
+
format_name seed, SecureRandom.uuid
|
28
22
|
else
|
29
|
-
|
30
|
-
format_name(seed, max_index)
|
23
|
+
seed
|
31
24
|
end
|
32
25
|
end
|
33
26
|
|
34
27
|
private
|
35
28
|
|
36
|
-
def format_name(name,
|
37
|
-
'%s - #%
|
29
|
+
def format_name(name, uuid)
|
30
|
+
'%s - #%s' % [name, uuid]
|
38
31
|
end
|
39
32
|
|
40
33
|
end
|