yaml-file-db 0.1.1 → 0.1.2
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/yaml-file-db/database.rb +22 -1
- data/lib/yaml-file-db/row.rb +43 -19
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cdec368220bb1f0c3075bc77ce04deee5d71b589dedfe4768c12a91c963b5373
|
4
|
+
data.tar.gz: 64a96c084ff0d6a622c787c84632fb9163f8218151e1575a71b0ca02bc10413d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83182ca75c22109d1e0a8c117cfae4d75551b9d6f363b4a244d596864fb9b6e657e49b29312ea1b235a0e607ca656a69238acbfa88a4359d7303994d16e7da69
|
7
|
+
data.tar.gz: 2d7e1a93edefba627b2da0bb473398e35dd84343070268256eb3b198d60cfd3bb1b24ad0aa0f16fc621efb1fb8c117ee39f2c9b8b7e9dff2d6d4ac69611df987
|
@@ -14,6 +14,7 @@ module YDB
|
|
14
14
|
def build()
|
15
15
|
build_tables()
|
16
16
|
build_relationships()
|
17
|
+
check_relationships()
|
17
18
|
self
|
18
19
|
end
|
19
20
|
|
@@ -43,17 +44,37 @@ module YDB
|
|
43
44
|
end
|
44
45
|
|
45
46
|
def build_relationships()
|
47
|
+
keywords = keywords()
|
48
|
+
iterate_over_rows do |row|
|
49
|
+
row.build_relationships(self, keywords)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def check_relationships()
|
54
|
+
keywords = keywords()
|
55
|
+
iterate_over_rows do |row|
|
56
|
+
row.check_relationships(self, keywords)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def keywords()
|
46
63
|
keywords = []
|
47
64
|
(self.instance_variables - INTERNAL_VARS).each do |var|
|
48
65
|
keywords << var.to_s[1..-1]
|
49
66
|
keywords << var.to_s[1..-1].singularize
|
50
67
|
end
|
68
|
+
keywords
|
69
|
+
end
|
70
|
+
|
71
|
+
def iterate_over_rows(&block)
|
51
72
|
self.instance_variables.each do |var|
|
52
73
|
next if INTERNAL_VARS.include? var
|
53
74
|
table = instance_variable_get var
|
54
75
|
table.each do |id, row|
|
55
76
|
begin
|
56
|
-
|
77
|
+
block.call(row)
|
57
78
|
rescue ValidationError => error
|
58
79
|
@errors << "#{row.source}: #{error.to_s}"
|
59
80
|
end
|
data/lib/yaml-file-db/row.rb
CHANGED
@@ -13,26 +13,41 @@ module YDB
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def build_relationships(db, keywords)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
array.each do |primary_key|
|
26
|
-
entity = entities[primary_key]
|
27
|
-
raise ValidationError.new("invalid primary_key #{primary_key}") if entity.nil?
|
28
|
-
value << entity
|
16
|
+
iterate_over_columns do |key, value|
|
17
|
+
if keywords.include?(key)
|
18
|
+
if key.pluralize == key
|
19
|
+
rows = []
|
20
|
+
table = db.public_send(key.to_sym)
|
21
|
+
value.each do |primary_key|
|
22
|
+
row = table[primary_key]
|
23
|
+
raise ValidationError.new("invalid primary_key: #{primary_key} is not part of #{key}") if row.nil?
|
24
|
+
rows << row
|
29
25
|
end
|
30
|
-
instance_variable_set("@#{
|
26
|
+
instance_variable_set("@#{key}", rows)
|
31
27
|
else
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
row = db.public_send(key.pluralize.to_sym)[value]
|
29
|
+
raise ValidationError.new("invalid primary_key: #{primary_key} is not part of #{key}") if row.nil?
|
30
|
+
instance_variable_set("@#{key}", row)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def check_relationships(db, keywords)
|
37
|
+
iterate_over_columns do |key, value|
|
38
|
+
if keywords.include?(key)
|
39
|
+
# move row into array to make it iterable
|
40
|
+
value = [value] if value.is_a?(YDB::Row)
|
41
|
+
value.each do |row|
|
42
|
+
if row.respond_to?(self.class.to_s.downcase.to_sym)
|
43
|
+
unless row.public_send(self.class.to_s.downcase.to_sym) == self
|
44
|
+
raise ValidationError.new("inconsistent relationship: #{row.id} doesn't link back to #{self.id}")
|
45
|
+
end
|
46
|
+
elsif row.respond_to?(self.class.to_s.downcase.pluralize.to_sym)
|
47
|
+
unless row.public_send(self.class.to_s.downcase.pluralize.to_sym).include?(self)
|
48
|
+
raise ValidationError.new("inconsistent relationship: #{row.id} doesn't link back to #{self.id}")
|
49
|
+
end
|
50
|
+
end
|
36
51
|
end
|
37
52
|
end
|
38
53
|
end
|
@@ -53,11 +68,20 @@ module YDB
|
|
53
68
|
|
54
69
|
doc.each do |name, value|
|
55
70
|
instance_variable_set("@#{name}", value)
|
56
|
-
next if self.respond_to?
|
71
|
+
next if self.respond_to?(name.to_sym)
|
57
72
|
self.class.send("attr_reader", name.to_sym)
|
58
73
|
end
|
59
74
|
end
|
60
75
|
|
76
|
+
def iterate_over_columns(&block)
|
77
|
+
self.instance_variables.each do |var|
|
78
|
+
next if INTERNAL_VARS.include?(var)
|
79
|
+
key = var.to_s[1..-1]
|
80
|
+
value = instance_variable_get(var)
|
81
|
+
block.call(key, value)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
61
85
|
def validate_filename()
|
62
86
|
raise ValidationError.new("invalid filename") unless self.id =~ /^[\w-]+$/
|
63
87
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml-file-db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Louis-Philippe Gauthier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-02-
|
11
|
+
date: 2021-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|