rails_graph 0.2.0 → 0.3.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 +4 -4
- data/Gemfile.lock +22 -21
- data/lib/rails_graph/commands/build_graph.rb +5 -2
- data/lib/rails_graph/commands/builders/associations.rb +63 -0
- data/lib/rails_graph/commands/builders/models.rb +13 -16
- data/lib/rails_graph/helpers/models.rb +2 -0
- data/lib/rails_graph/inspector.rb +31 -0
- data/lib/rails_graph/version.rb +1 -1
- data/lib/rails_graph.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2aa9e5821416a34e7eca9ba18199bea6007190821c50cabb84147db6232b06e2
|
4
|
+
data.tar.gz: f54cb43940dba30d7ddc5915cb8669601d0e05b9b5eb4582c18a504859101ed0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 714e4e3d097f8fda7958665d9f4f8ee0ca78978ecab77be2a59ad84fa1921c3204ae93d111072882068ce33ee3966786a3d7473d787e275077d61785f105815a
|
7
|
+
data.tar.gz: f3889f7437868743a38971f1808e2b3e9d6ac8445a8567f3e96ebb7722d35a24795830f220bdf7eeb1940bfefe472c1cc33f2539a4bd380358af006ad4c62035
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rails_graph (0.
|
4
|
+
rails_graph (0.3.0)
|
5
5
|
activerecord (>= 6.0, < 7.1)
|
6
6
|
neo4j-ruby-driver (>= 4.4.0.alpha.8)
|
7
7
|
railties (>= 6.0, < 7.1)
|
@@ -9,25 +9,25 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
actionpack (7.0.
|
13
|
-
actionview (= 7.0.
|
14
|
-
activesupport (= 7.0.
|
15
|
-
rack (~> 2.0, >= 2.2.
|
12
|
+
actionpack (7.0.5)
|
13
|
+
actionview (= 7.0.5)
|
14
|
+
activesupport (= 7.0.5)
|
15
|
+
rack (~> 2.0, >= 2.2.4)
|
16
16
|
rack-test (>= 0.6.3)
|
17
17
|
rails-dom-testing (~> 2.0)
|
18
18
|
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
19
|
-
actionview (7.0.
|
20
|
-
activesupport (= 7.0.
|
19
|
+
actionview (7.0.5)
|
20
|
+
activesupport (= 7.0.5)
|
21
21
|
builder (~> 3.1)
|
22
22
|
erubi (~> 1.4)
|
23
23
|
rails-dom-testing (~> 2.0)
|
24
24
|
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
25
|
-
activemodel (7.0.
|
26
|
-
activesupport (= 7.0.
|
27
|
-
activerecord (7.0.
|
28
|
-
activemodel (= 7.0.
|
29
|
-
activesupport (= 7.0.
|
30
|
-
activesupport (7.0.
|
25
|
+
activemodel (7.0.5)
|
26
|
+
activesupport (= 7.0.5)
|
27
|
+
activerecord (7.0.5)
|
28
|
+
activemodel (= 7.0.5)
|
29
|
+
activesupport (= 7.0.5)
|
30
|
+
activesupport (7.0.5)
|
31
31
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
32
32
|
i18n (>= 1.6, < 2)
|
33
33
|
minitest (>= 5.1)
|
@@ -63,12 +63,12 @@ GEM
|
|
63
63
|
async-io
|
64
64
|
connection_pool
|
65
65
|
zeitwerk (>= 2.1.10)
|
66
|
-
nokogiri (1.15.
|
66
|
+
nokogiri (1.15.2)
|
67
67
|
mini_portile2 (~> 2.8.2)
|
68
68
|
racc (~> 1.4)
|
69
|
-
nokogiri (1.15.
|
69
|
+
nokogiri (1.15.2-arm64-darwin)
|
70
70
|
racc (~> 1.4)
|
71
|
-
nokogiri (1.15.
|
71
|
+
nokogiri (1.15.2-x86_64-linux)
|
72
72
|
racc (~> 1.4)
|
73
73
|
parallel (1.22.1)
|
74
74
|
parser (3.1.2.1)
|
@@ -80,11 +80,12 @@ GEM
|
|
80
80
|
rails-dom-testing (2.0.3)
|
81
81
|
activesupport (>= 4.2.0)
|
82
82
|
nokogiri (>= 1.6)
|
83
|
-
rails-html-sanitizer (1.
|
84
|
-
loofah (~> 2.
|
85
|
-
|
86
|
-
|
87
|
-
|
83
|
+
rails-html-sanitizer (1.6.0)
|
84
|
+
loofah (~> 2.21)
|
85
|
+
nokogiri (~> 1.14)
|
86
|
+
railties (7.0.5)
|
87
|
+
actionpack (= 7.0.5)
|
88
|
+
activesupport (= 7.0.5)
|
88
89
|
method_source
|
89
90
|
rake (>= 12.2)
|
90
91
|
thor (~> 1.0)
|
@@ -21,6 +21,7 @@ require_relative "../graph/relationships/pack_model"
|
|
21
21
|
require_relative "../helpers/associations"
|
22
22
|
require_relative "../helpers/models"
|
23
23
|
|
24
|
+
require_relative "./builders/associations"
|
24
25
|
require_relative "./builders/models"
|
25
26
|
require_relative "./builders/packs"
|
26
27
|
require_relative "./builders/databases"
|
@@ -36,7 +37,8 @@ module RailsGraph
|
|
36
37
|
setup_generic_nodes
|
37
38
|
|
38
39
|
RailsGraph::Commands::Builders::Databases.enrich(graph: graph) if configuration.databases?
|
39
|
-
RailsGraph::Commands::Builders::Models.enrich(graph: graph, classes: classes,
|
40
|
+
RailsGraph::Commands::Builders::Models.enrich(inspector: inspector, graph: graph, classes: classes,
|
41
|
+
configuration: configuration)
|
40
42
|
RailsGraph::Commands::Builders::Packs.enrich(graph: graph) if configuration.include_packwerk?
|
41
43
|
|
42
44
|
graph
|
@@ -44,12 +46,13 @@ module RailsGraph
|
|
44
46
|
|
45
47
|
private
|
46
48
|
|
47
|
-
attr_reader :configuration, :classes, :graph
|
49
|
+
attr_reader :configuration, :classes, :graph, :inspector
|
48
50
|
|
49
51
|
def initialize(configuration:)
|
50
52
|
@configuration = configuration
|
51
53
|
@classes = ActiveRecord::Base.descendants + configuration.include_classes
|
52
54
|
@graph = RailsGraph::Graph::Graph.new
|
55
|
+
@inspector = RailsGraph::Inspector.new
|
53
56
|
end
|
54
57
|
|
55
58
|
def setup_generic_nodes
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RailsGraph
|
4
|
+
module Commands
|
5
|
+
module Builders
|
6
|
+
class Associations
|
7
|
+
attr_reader :graph, :inspector
|
8
|
+
|
9
|
+
def self.enrich(...)
|
10
|
+
new(...).enrich
|
11
|
+
end
|
12
|
+
|
13
|
+
def enrich
|
14
|
+
build_associations_relationships
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :classes
|
20
|
+
|
21
|
+
def initialize(inspector:, graph:, classes:)
|
22
|
+
@inspector = inspector
|
23
|
+
@graph = graph
|
24
|
+
@classes = classes
|
25
|
+
end
|
26
|
+
|
27
|
+
def build_associations_relationships
|
28
|
+
classes.each do |model|
|
29
|
+
model.reflect_on_all_associations.each do |association|
|
30
|
+
association.check_validity!
|
31
|
+
|
32
|
+
source_node, target_node = fetch_association_nodes(graph, association)
|
33
|
+
next report_invalid_class(model) if source_node.nil? || target_node.nil?
|
34
|
+
|
35
|
+
add_relationship(association, source_node, target_node)
|
36
|
+
rescue ActiveRecord::ActiveRecordError => _e
|
37
|
+
report_invalid_association(association)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def fetch_association_nodes(graph, association)
|
43
|
+
source_node = RailsGraph::Helpers::Associations.source_node(graph, association)
|
44
|
+
target_node = RailsGraph::Helpers::Associations.target_node(graph, association)
|
45
|
+
[source_node, target_node]
|
46
|
+
end
|
47
|
+
|
48
|
+
def add_relationship(association, source_node, target_node)
|
49
|
+
relationship = RailsGraph::Graph::Relationships::Association.new(association, source_node, target_node)
|
50
|
+
graph.add_relationship(relationship)
|
51
|
+
end
|
52
|
+
|
53
|
+
def report_invalid_association(association)
|
54
|
+
inspector.add_association(association)
|
55
|
+
end
|
56
|
+
|
57
|
+
def report_invalid_class(klass)
|
58
|
+
inspector.add_class(klass)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -4,25 +4,29 @@ module RailsGraph
|
|
4
4
|
module Commands
|
5
5
|
module Builders
|
6
6
|
class Models
|
7
|
-
|
8
|
-
new(graph: graph, classes: classes, configuration: configuration).enrich
|
7
|
+
attr_reader :graph, :inspector
|
9
8
|
|
10
|
-
|
9
|
+
def self.enrich(...)
|
10
|
+
new(...).enrich
|
11
11
|
end
|
12
12
|
|
13
13
|
def enrich
|
14
14
|
build_model_nodes
|
15
|
-
|
15
|
+
build_associations
|
16
16
|
build_column_nodes if configuration.columns?
|
17
17
|
build_model_table_relationships if configuration.databases?
|
18
18
|
build_inheritance_relationships if configuration.inheritance?
|
19
|
+
|
20
|
+
inspector.log
|
21
|
+
graph
|
19
22
|
end
|
20
23
|
|
21
24
|
private
|
22
25
|
|
23
|
-
attr_reader :
|
26
|
+
attr_reader :classes, :configuration
|
24
27
|
|
25
|
-
def initialize(graph:, classes:, configuration:)
|
28
|
+
def initialize(inspector:, graph:, classes:, configuration:)
|
29
|
+
@inspector = inspector
|
26
30
|
@graph = graph
|
27
31
|
@configuration = configuration
|
28
32
|
@classes = classes
|
@@ -41,16 +45,8 @@ module RailsGraph
|
|
41
45
|
end
|
42
46
|
end
|
43
47
|
|
44
|
-
def
|
45
|
-
|
46
|
-
model.reflect_on_all_associations.each do |association|
|
47
|
-
source_node = RailsGraph::Helpers::Associations.source_node(graph, association)
|
48
|
-
target_node = RailsGraph::Helpers::Associations.target_node(graph, association)
|
49
|
-
|
50
|
-
relationship = RailsGraph::Graph::Relationships::Association.new(association, source_node, target_node)
|
51
|
-
graph.add_relationship(relationship)
|
52
|
-
end
|
53
|
-
end
|
48
|
+
def build_associations
|
49
|
+
Builders::Associations.enrich(inspector: inspector, graph: graph, classes: classes)
|
54
50
|
end
|
55
51
|
|
56
52
|
def build_column_nodes
|
@@ -91,6 +87,7 @@ module RailsGraph
|
|
91
87
|
|
92
88
|
identifier = RailsGraph::Helpers::Models.identifier(model)
|
93
89
|
node = graph.node(identifier)
|
90
|
+
|
94
91
|
relationship = build_represents_table_relationship(node, table_node)
|
95
92
|
graph.add_relationship(relationship)
|
96
93
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "set"
|
4
|
+
|
5
|
+
module RailsGraph
|
6
|
+
class Inspector
|
7
|
+
def initialize
|
8
|
+
@classes = Set.new
|
9
|
+
@associations = Set.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_class(klass)
|
13
|
+
@classes.add(klass)
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_association(association)
|
17
|
+
@associations.add(association)
|
18
|
+
end
|
19
|
+
|
20
|
+
def log
|
21
|
+
@classes.each do |klass|
|
22
|
+
puts "[WARN][RailsGraph]: Invalid class configuration: #{klass}"
|
23
|
+
end
|
24
|
+
|
25
|
+
@associations.each do |association|
|
26
|
+
puts "[WARN][RailsGraph]: #{association.name} association defined " \
|
27
|
+
"under #{association.active_record.name} class has invalid configurations!"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/rails_graph/version.rb
CHANGED
data/lib/rails_graph.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ahmad Elassuty
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-05-
|
11
|
+
date: 2023-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- graph.svg
|
86
86
|
- lib/rails_graph.rb
|
87
87
|
- lib/rails_graph/commands/build_graph.rb
|
88
|
+
- lib/rails_graph/commands/builders/associations.rb
|
88
89
|
- lib/rails_graph/commands/builders/databases.rb
|
89
90
|
- lib/rails_graph/commands/builders/models.rb
|
90
91
|
- lib/rails_graph/commands/builders/packs.rb
|
@@ -114,6 +115,7 @@ files:
|
|
114
115
|
- lib/rails_graph/helpers/associations.rb
|
115
116
|
- lib/rails_graph/helpers/models.rb
|
116
117
|
- lib/rails_graph/helpers/options_parser.rb
|
118
|
+
- lib/rails_graph/inspector.rb
|
117
119
|
- lib/rails_graph/railtie.rb
|
118
120
|
- lib/rails_graph/tasks/rails_graph.rake
|
119
121
|
- lib/rails_graph/version.rb
|