yaml-file-db 0.1.3 → 0.1.4

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