database_schema_ownership 1.0.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 +7 -0
- data/lib/database_schema_ownership/database_schema_ownership.rake +12 -0
- data/lib/database_schema_ownership/entity.rb +12 -0
- data/lib/database_schema_ownership/parser/ruby_parser.rb +23 -0
- data/lib/database_schema_ownership/parser/sql_parser.rb +23 -0
- data/lib/database_schema_ownership/parser.rb +24 -0
- data/lib/database_schema_ownership/railtie.rb +11 -0
- data/lib/database_schema_ownership/runner.rb +60 -0
- data/lib/database_schema_ownership/version.rb +5 -0
- data/lib/database_schema_ownership.rb +11 -0
- metadata +69 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b5e756e987e34d6afc6217586393241faf93bf362adf8dac06ddcda94ac20b85
|
4
|
+
data.tar.gz: 57a76af1486dcb2e317451be4f7ba9be6d940ab0ec1a23d471181041ce0698ad
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1939d8886af6269f2ee40d1ceb10c5c0e10652fe44a308a62eb8b55be227727fdb45701251b77918eb554a13d8c23319bc557e61d37db152341c821ba4131b7c
|
7
|
+
data.tar.gz: 39a9a193151dd8f4213af72870aa133058ee75dcb960850a8adf7826d9f71332da4362a73693d6cccb8e453887dcfbc84eb593631f75ad16fc68dd1c176872a6
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :database_schema_ownership do
|
4
|
+
desc "Generate ownership files for database schema"
|
5
|
+
task dump: "db:schema:dump" do
|
6
|
+
DatabaseSchemaOwnership::Runner.new.run
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
Rake::Task["db:schema:dump"].enhance do
|
11
|
+
Rake::Task["database_schema_ownership:dump"].invoke
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DatabaseSchemaOwnership
|
4
|
+
class Parser
|
5
|
+
class RubyParser < Parser # :nodoc:
|
6
|
+
def parse
|
7
|
+
parse_tables + parse_foreign_keys
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse_tables
|
11
|
+
schema.scan(/\n*(\s+create_table "([^"]*)".*?end)/m).map do |s|
|
12
|
+
DatabaseSchemaOwnership::Entity.new(s[1], s[0])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse_foreign_keys
|
17
|
+
schema.scan(/\n*(\s+add_foreign_key "([^"]*)", "([^"]*)")/).map do |s|
|
18
|
+
DatabaseSchemaOwnership::Entity.new(s[1], s[0])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DatabaseSchemaOwnership
|
4
|
+
class Parser
|
5
|
+
class SqlParser < Parser # :nodoc:
|
6
|
+
def parse
|
7
|
+
parse_tables + parse_indexes
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse_tables
|
11
|
+
schema.scan(/(CREATE TABLE IF NOT EXISTS "([^"]*)"[^;]*;)/m).map do |s|
|
12
|
+
DatabaseSchemaOwnership::Entity.new(s[1], s[0])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse_indexes
|
17
|
+
schema.scan(/(CREATE INDEX .* ON "([^"]*)"[^;]*;)/).map do |s|
|
18
|
+
DatabaseSchemaOwnership::Entity.new(s[1], s[0])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DatabaseSchemaOwnership
|
4
|
+
class Parser # :nodoc:
|
5
|
+
def self.for(extension)
|
6
|
+
case extension
|
7
|
+
when ".rb" then RubyParser
|
8
|
+
when ".sql" then SqlParser
|
9
|
+
else
|
10
|
+
raise ArgumentError, "Unsupported schema extension: #{extension}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_accessor :schema_path
|
15
|
+
|
16
|
+
def initialize(schema_path)
|
17
|
+
@schema_path = schema_path
|
18
|
+
end
|
19
|
+
|
20
|
+
def schema
|
21
|
+
File.read(schema_path)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module DatabaseSchemaOwnership
|
4
|
+
# :nodoc
|
5
|
+
class Runner
|
6
|
+
RUBY_SCHEMA_PATH = "db/schema.rb"
|
7
|
+
SQL_SCHEMA_PATH = "db/structure.sql"
|
8
|
+
OWNERSHIP_PATH = "db/database_schema_ownership"
|
9
|
+
|
10
|
+
attr_reader :schema_path, :folder_path, :schema_extension
|
11
|
+
|
12
|
+
def initialize(schema_path = nil, folder_path = OWNERSHIP_PATH)
|
13
|
+
@schema_path = schema_path || find_schema_path
|
14
|
+
@folder_path = folder_path
|
15
|
+
@schema_extension = File.extname(@schema_path)
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
entities = parser.parse
|
20
|
+
|
21
|
+
FileUtils.mkdir_p(folder_path) if entities.any?
|
22
|
+
|
23
|
+
grouped = group_entities(entities)
|
24
|
+
|
25
|
+
grouped.each do |name, metadata|
|
26
|
+
File.write(file_name(name), metadata)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def group_entities(entities)
|
33
|
+
entities.each_with_object({}) do |entity, hash|
|
34
|
+
if hash[entity.name]
|
35
|
+
hash[entity.name] += "\n#{entity.metadata}"
|
36
|
+
else
|
37
|
+
hash[entity.name] = entity.metadata
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def parser
|
43
|
+
DatabaseSchemaOwnership::Parser.for(schema_extension).new(schema_path)
|
44
|
+
end
|
45
|
+
|
46
|
+
def file_name(name)
|
47
|
+
"#{folder_path}/#{name}#{schema_extension}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def find_schema_path
|
51
|
+
if File.exist?(RUBY_SCHEMA_PATH)
|
52
|
+
RUBY_SCHEMA_PATH
|
53
|
+
elsif File.exist?(SQL_SCHEMA_PATH)
|
54
|
+
SQL_SCHEMA_PATH
|
55
|
+
else
|
56
|
+
raise "Schema file not found"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "database_schema_ownership/version"
|
4
|
+
require_relative "database_schema_ownership/entity"
|
5
|
+
require_relative "database_schema_ownership/parser/ruby_parser"
|
6
|
+
require_relative "database_schema_ownership/parser/sql_parser"
|
7
|
+
require_relative "database_schema_ownership/parser"
|
8
|
+
require_relative "database_schema_ownership/runner"
|
9
|
+
|
10
|
+
module DatabaseSchemaOwnership # :nodoc:
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: database_schema_ownership
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Evgeniy Demin
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-11-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
- lawliet.djez@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/database_schema_ownership.rb
|
35
|
+
- lib/database_schema_ownership/database_schema_ownership.rake
|
36
|
+
- lib/database_schema_ownership/entity.rb
|
37
|
+
- lib/database_schema_ownership/parser.rb
|
38
|
+
- lib/database_schema_ownership/parser/ruby_parser.rb
|
39
|
+
- lib/database_schema_ownership/parser/sql_parser.rb
|
40
|
+
- lib/database_schema_ownership/railtie.rb
|
41
|
+
- lib/database_schema_ownership/runner.rb
|
42
|
+
- lib/database_schema_ownership/version.rb
|
43
|
+
homepage: https://github.com/djezzzl/database_schema_ownership
|
44
|
+
licenses:
|
45
|
+
- MIT
|
46
|
+
metadata:
|
47
|
+
homepage_uri: https://github.com/djezzzl/database_schema_ownership
|
48
|
+
source_code_uri: https://github.com/djezzzl/database_schema_ownership
|
49
|
+
changelog_uri: https://github.com/djezzzl/database_schema_ownership/blob/master/CHANGELOG.md
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 2.5.0
|
59
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
requirements: []
|
65
|
+
rubygems_version: 3.5.23
|
66
|
+
signing_key:
|
67
|
+
specification_version: 4
|
68
|
+
summary: Provide an easy way to manage code ownership over a database schema.
|
69
|
+
test_files: []
|