yaml-file-db 0.1.3 → 0.1.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
  SHA256:
3
- metadata.gz: f4700000d15653642b4406b061880362c02aaa98baed7ab989234299bd058443
4
- data.tar.gz: 2b39ce455282320fe6eed78f75515988136c02f5b1be6c7aaf98719036cd7448
3
+ metadata.gz: becc9d0085a685c6a7b47e8d2fb32a372a6dd0d4af6f7bfc58b02ff896c8c90b
4
+ data.tar.gz: 6180250656d4c32731e5a77a9127fd17982b9fa48c0bcbff535c4575797890a8
5
5
  SHA512:
6
- metadata.gz: 87b7ab971ba139a3293ea7761c091c610d8f71505df5f17d64199a635edef806bcbf365f6eb69ea05911d30d25bdfadb3d47b28efd37d6b43be5e5f665a26b09
7
- data.tar.gz: 1c7e6cda53f628c4d3119954e09c179ba28ec38960d9ca529579a0af8a5d114293d0ddac1e21e8f5ee79a21db4ced29d81e773b221922bde2a4550a88597a922
6
+ metadata.gz: 4daf28abf27d81095e879eeac57d356315becbf88ccc30c6eed43fdeda22562f018554001e82120cb2a43209b1a8b05957342c3e07bc19f3496f31b6fd66c55b
7
+ data.tar.gz: 938c7c4a1c69ed176b0417346c87a35dbede5ec505f6b97c40a956caaedd9c4233885d8bfec95e005317680161d8bb4fbd980b55d9b4cff478d3abb3a98584fb
data/lib/yaml-file-db.rb CHANGED
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/inflector'
2
4
  require 'json-schema'
3
5
  require 'yaml'
4
6
 
5
- require 'yaml-file-db/database.rb'
6
- require 'yaml-file-db/exception.rb'
7
- require 'yaml-file-db/row.rb'
7
+ require 'yaml-file-db/database'
8
+ require 'yaml-file-db/exception'
9
+ require 'yaml-file-db/row'
@@ -1,7 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module YDB
2
4
  class Database
3
-
4
- INTERNAL_VARS = [:@errors, :@schemas, :@source].freeze
5
+ INTERNAL_VARS = %i[@errors @schemas @source].freeze
5
6
 
6
7
  attr_reader :errors, :schemas, :source
7
8
 
@@ -11,16 +12,16 @@ module YDB
11
12
  @source = source
12
13
  end
13
14
 
14
- def build()
15
- build_tables()
16
- build_relationships()
17
- check_relationships()
15
+ def build
16
+ build_tables
17
+ build_relationships
18
+ check_relationships
18
19
  self
19
20
  end
20
21
 
21
22
  private
22
23
 
23
- def build_tables()
24
+ def build_tables
24
25
  Dir["#{@source}/*"].each do |table_path|
25
26
  table = {}
26
27
 
@@ -30,57 +31,51 @@ module YDB
30
31
  schema_path = "#{@schemas}/#{table_name.singularize}.yml"
31
32
 
32
33
  Dir["#{table_path}/*.yml"].each do |source|
33
- begin
34
- row = Object.const_get(klass_name).new(source, schema_path)
35
- table[row.id] = row
36
- rescue ValidationError => error
37
- @errors << "[#{source.split("/")[-3..-1].join("/")}] #{error.to_s}"
38
- end
34
+ row = Object.const_get(klass_name).new(source, schema_path)
35
+ table[row.id] = row
36
+ rescue ValidationError => e
37
+ @errors << "[#{source.split('/')[-3..].join('/')}] #{e}"
39
38
  end
40
39
 
41
40
  instance_variable_set("@#{table_name}", table)
42
- self.class.send("attr_reader", table_name.to_sym)
41
+ self.class.send('attr_reader', table_name.to_sym)
43
42
  end
44
43
  end
45
44
 
46
- def build_relationships()
45
+ def build_relationships
47
46
  keywords = keywords()
48
47
  iterate_over_rows do |row|
49
48
  row.build_relationships(self, keywords)
50
49
  end
51
50
  end
52
51
 
53
- def check_relationships()
52
+ def check_relationships
54
53
  keywords = keywords()
55
54
  iterate_over_rows do |row|
56
55
  row.check_relationships(self, keywords)
57
56
  end
58
57
  end
59
58
 
60
- private
61
-
62
- def keywords()
59
+ def keywords
63
60
  keywords = []
64
- (self.instance_variables - INTERNAL_VARS).each do |var|
65
- keywords << var.to_s[1..-1]
66
- keywords << var.to_s[1..-1].singularize
61
+ (instance_variables - INTERNAL_VARS).each do |var|
62
+ keywords << var.to_s[1..]
63
+ keywords << var.to_s[1..].singularize
67
64
  end
68
65
  keywords
69
66
  end
70
67
 
71
68
  def iterate_over_rows(&block)
72
- self.instance_variables.each do |var|
69
+ instance_variables.each do |var|
73
70
  next if INTERNAL_VARS.include? var
71
+
74
72
  table = instance_variable_get var
75
- table.each do |id, row|
76
- begin
77
- block.call(row)
78
- rescue ValidationError => error
79
- @errors << "[#{row.source.split("/")[-3..-1].join("/")}] #{error.to_s}"
80
- end
73
+ table.each do |_id, row|
74
+ block.call(row)
75
+ rescue ValidationError => e
76
+ @errors << "[#{row.source.split('/')[-3..].join('/')}] #{e}"
81
77
  end
82
78
  end
83
79
  end
84
-
85
80
  end
86
81
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module YDB
2
4
  class ValidationError < StandardError
3
5
  end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module YDB
2
4
  class Row
3
- INTERNAL_VARS = [:@id, :@source].freeze
5
+ INTERNAL_VARS = %i[@id @source].freeze
4
6
 
5
7
  attr_reader :id, :source
6
8
 
7
9
  def initialize(source, schema_path)
8
- @id = File.basename(source, ".yml")
10
+ @id = File.basename(source, '.yml')
9
11
  @source = source
10
12
 
11
- validate_filename()
13
+ validate_filename
12
14
  build(source, schema_path)
13
15
  end
14
16
 
@@ -20,20 +22,22 @@ module YDB
20
22
  table = db.public_send(key.to_sym)
21
23
  value.each do |primary_key|
22
24
  row = table[primary_key]
23
- raise ValidationError.new("Invalid primary_key: #{primary_key} isn't part of table #{key}") if row.nil?
25
+ raise ValidationError, "Invalid primary_key: #{primary_key} isn't part of table #{key}" if row.nil?
26
+
24
27
  rows << row
25
28
  end
26
29
  instance_variable_set("@#{key}", rows)
27
30
  else
28
31
  row = db.public_send(key.pluralize.to_sym)[value]
29
- raise ValidationError.new("Invalid primary_key: #{primary_key} isn't part of table #{key}") if row.nil?
32
+ raise ValidationError, "Invalid primary_key: #{primary_key} isn't part of table #{key}" if row.nil?
33
+
30
34
  instance_variable_set("@#{key}", row)
31
35
  end
32
36
  end
33
37
  end
34
38
  end
35
39
 
36
- def check_relationships(db, keywords)
40
+ def check_relationships(_db, keywords)
37
41
  iterate_over_columns do |key, value|
38
42
  if keywords.include?(key)
39
43
  # move row into array to make it iterable
@@ -41,11 +45,11 @@ module YDB
41
45
  value.each do |row|
42
46
  if row.respond_to?(self.class.to_s.downcase.to_sym)
43
47
  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}")
48
+ raise ValidationError, "Inconsistent relationship: #{row.id} doesn't link back to #{id}"
45
49
  end
46
50
  elsif row.respond_to?(self.class.to_s.downcase.pluralize.to_sym)
47
51
  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}")
52
+ raise ValidationError, "Inconsistent relationship: #{row.id} doesn't link back to #{id}"
49
53
  end
50
54
  end
51
55
  end
@@ -56,35 +60,38 @@ module YDB
56
60
  private
57
61
 
58
62
  def build(source, schema_path)
59
- doc = YAML.load(File.read(source))
60
- raise ValidationError.new("Invalid YAML document") if doc == false
63
+ doc = YAML.safe_load(File.read(source))
64
+ raise ValidationError, 'Invalid YAML document' if doc.nil?
61
65
 
62
- schema = YAML.load(File.read(schema_path))
66
+ schema = YAML.safe_load(File.read(schema_path))
63
67
  begin
64
- JSON::Validator.validate!(schema, doc, :parse_data => false)
65
- rescue JSON::Schema::ValidationError => error
66
- raise ValidationError.new("Invalid data: #{error.message}")
68
+ JSON::Validator.validate!(schema, doc, parse_data: false)
69
+ rescue JSON::Schema::ValidationError => e
70
+ raise ValidationError, "Invalid data: #{e.message}"
67
71
  end
68
72
 
69
73
  doc.each do |name, value|
70
74
  instance_variable_set("@#{name}", value)
71
- next if self.respond_to?(name.to_sym)
72
- self.class.send("attr_reader", name.to_sym)
75
+ next if respond_to?(name.to_sym)
76
+
77
+ self.class.send('attr_reader', name.to_sym)
73
78
  end
74
79
  end
75
80
 
76
81
  def iterate_over_columns(&block)
77
- self.instance_variables.each do |var|
82
+ instance_variables.each do |var|
78
83
  next if INTERNAL_VARS.include?(var)
79
- key = var.to_s[1..-1]
84
+
85
+ key = var.to_s[1..]
80
86
  value = instance_variable_get(var)
81
87
  block.call(key, value)
82
88
  end
83
89
  end
84
90
 
85
- def validate_filename()
86
- raise ValidationError.new("Invalid filename: #{self.id} doesn't follow dash-case convention") unless self.id =~ /\A[a-z\d][a-z\d-]*[a-z\d]\z/i
87
- end
91
+ def validate_filename
92
+ return if id =~ /\A[a-z\d][a-z\d-]*[a-z\d]\z/i
88
93
 
94
+ raise ValidationError, "Invalid filename: #{id} doesn't follow dash-case convention"
95
+ end
89
96
  end
90
97
  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.3
4
+ version: 0.1.4
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-25 00:00:00.000000000 Z
11
+ date: 2021-03-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -72,7 +72,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 2.6.0
76
76
  required_rubygems_version: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - ">="