rails_graph 0.2.0 → 0.4.0

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: 9f0e310d51090d130b13e29719da0379cbc968b6a6438f3d412059286d70c1b7
4
- data.tar.gz: a8e0b5adfb146a711cd8377581a653a747d6c78084b92242f99f2962e0c02471
3
+ metadata.gz: a941a0470a1b02c82bab156a908ccd4e44fefe6c55de286aac071124c87ca3d7
4
+ data.tar.gz: d313e6ad0f56c18d7026e8f199752f318a771f5bd6f07d5484f58b590d8c3255
5
5
  SHA512:
6
- metadata.gz: c964bc4dfd48309e1602fad6acdd68cccf6cd7276424b863e56b2058c4a10b4ce2a280017f316c160402507bb86bdc3d9665ae0de9c2876b039e2ab858e49c29
7
- data.tar.gz: 04e5f5a29a22c4fda077844de345e8feb6ca7d04b502b1f62209f3c3f310f7eace577906e7e56dd5aa330fd3d4679fcf7d97da08b5597c0a471b26117032c15c
6
+ metadata.gz: 7e9c40831fa2b9077efdc0e7d05ebb0f769fd8c118f6a472d2b5f4edd258db50f8dd281b00cb4e8565b236e5b1f467d13f86db36e038c92b209d4f950fae3af4
7
+ data.tar.gz: b5bfc0cd608cc3d0ba77724ac8fd28bfc2c81f32e79a95e23bd1eaac62f922c2928460fd682be5374149c1d7a86121dffccbbf0d08f1c6f1287e5cce60e6d759
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-3.1.2
1
+ ruby-3.2.3
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 3.1.2
1
+ ruby 3.2.3
data/Gemfile.lock CHANGED
@@ -1,33 +1,33 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rails_graph (0.2.0)
5
- activerecord (>= 6.0, < 7.1)
6
- neo4j-ruby-driver (>= 4.4.0.alpha.8)
7
- railties (>= 6.0, < 7.1)
4
+ rails_graph (0.4.0)
5
+ activerecord (>= 6.0)
6
+ neo4j-ruby-driver (>= 4.4)
7
+ railties (>= 6.0)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actionpack (7.0.4.3)
13
- actionview (= 7.0.4.3)
14
- activesupport (= 7.0.4.3)
15
- rack (~> 2.0, >= 2.2.0)
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.4.3)
20
- activesupport (= 7.0.4.3)
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.4.3)
26
- activesupport (= 7.0.4.3)
27
- activerecord (7.0.4.3)
28
- activemodel (= 7.0.4.3)
29
- activesupport (= 7.0.4.3)
30
- activesupport (7.0.4.3)
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)
@@ -48,30 +48,26 @@ GEM
48
48
  diff-lcs (1.5.0)
49
49
  erubi (1.12.0)
50
50
  fiber-local (1.0.0)
51
- i18n (1.13.0)
51
+ i18n (1.14.0)
52
52
  concurrent-ruby (~> 1.0)
53
53
  io-event (1.2.2)
54
- json (2.6.2)
54
+ json (2.6.3)
55
55
  loofah (2.21.3)
56
56
  crass (~> 1.0.2)
57
57
  nokogiri (>= 1.12.0)
58
58
  method_source (1.0.0)
59
- mini_portile2 (2.8.2)
60
59
  minitest (5.18.0)
61
60
  neo4j-ruby-driver (4.4.4)
62
61
  activesupport
63
62
  async-io
64
63
  connection_pool
65
64
  zeitwerk (>= 2.1.10)
66
- nokogiri (1.15.1)
67
- mini_portile2 (~> 2.8.2)
65
+ nokogiri (1.15.2-arm64-darwin)
68
66
  racc (~> 1.4)
69
- nokogiri (1.15.1-arm64-darwin)
67
+ nokogiri (1.15.2-x86_64-linux)
70
68
  racc (~> 1.4)
71
- nokogiri (1.15.1-x86_64-linux)
72
- racc (~> 1.4)
73
- parallel (1.22.1)
74
- parser (3.1.2.1)
69
+ parallel (1.23.0)
70
+ parser (3.2.2.1)
75
71
  ast (~> 2.4.1)
76
72
  racc (1.6.2)
77
73
  rack (2.2.7)
@@ -80,50 +76,51 @@ GEM
80
76
  rails-dom-testing (2.0.3)
81
77
  activesupport (>= 4.2.0)
82
78
  nokogiri (>= 1.6)
83
- rails-html-sanitizer (1.5.0)
84
- loofah (~> 2.19, >= 2.19.1)
85
- railties (7.0.4.3)
86
- actionpack (= 7.0.4.3)
87
- activesupport (= 7.0.4.3)
79
+ rails-html-sanitizer (1.6.0)
80
+ loofah (~> 2.21)
81
+ nokogiri (~> 1.14)
82
+ railties (7.0.5)
83
+ actionpack (= 7.0.5)
84
+ activesupport (= 7.0.5)
88
85
  method_source
89
86
  rake (>= 12.2)
90
87
  thor (~> 1.0)
91
88
  zeitwerk (~> 2.5)
92
89
  rainbow (3.1.1)
93
90
  rake (13.0.6)
94
- regexp_parser (2.5.0)
91
+ regexp_parser (2.8.0)
95
92
  rexml (3.2.5)
96
- rspec (3.11.0)
97
- rspec-core (~> 3.11.0)
98
- rspec-expectations (~> 3.11.0)
99
- rspec-mocks (~> 3.11.0)
100
- rspec-core (3.11.0)
101
- rspec-support (~> 3.11.0)
102
- rspec-expectations (3.11.1)
93
+ rspec (3.12.0)
94
+ rspec-core (~> 3.12.0)
95
+ rspec-expectations (~> 3.12.0)
96
+ rspec-mocks (~> 3.12.0)
97
+ rspec-core (3.12.2)
98
+ rspec-support (~> 3.12.0)
99
+ rspec-expectations (3.12.3)
103
100
  diff-lcs (>= 1.2.0, < 2.0)
104
- rspec-support (~> 3.11.0)
105
- rspec-mocks (3.11.1)
101
+ rspec-support (~> 3.12.0)
102
+ rspec-mocks (3.12.5)
106
103
  diff-lcs (>= 1.2.0, < 2.0)
107
- rspec-support (~> 3.11.0)
108
- rspec-support (3.11.1)
109
- rubocop (1.36.0)
104
+ rspec-support (~> 3.12.0)
105
+ rspec-support (3.12.0)
106
+ rubocop (1.52.0)
110
107
  json (~> 2.3)
111
108
  parallel (~> 1.10)
112
- parser (>= 3.1.2.1)
109
+ parser (>= 3.2.0.0)
113
110
  rainbow (>= 2.2.2, < 4.0)
114
111
  regexp_parser (>= 1.8, < 3.0)
115
112
  rexml (>= 3.2.5, < 4.0)
116
- rubocop-ast (>= 1.20.1, < 2.0)
113
+ rubocop-ast (>= 1.28.0, < 2.0)
117
114
  ruby-progressbar (~> 1.7)
118
- unicode-display_width (>= 1.4.0, < 3.0)
119
- rubocop-ast (1.21.0)
120
- parser (>= 3.1.1.0)
121
- ruby-progressbar (1.11.0)
115
+ unicode-display_width (>= 2.4.0, < 3.0)
116
+ rubocop-ast (1.29.0)
117
+ parser (>= 3.2.1.0)
118
+ ruby-progressbar (1.13.0)
122
119
  thor (1.2.2)
123
120
  timers (4.3.5)
124
121
  tzinfo (2.0.6)
125
122
  concurrent-ruby (~> 1.0)
126
- unicode-display_width (2.3.0)
123
+ unicode-display_width (2.4.2)
127
124
  zeitwerk (2.6.8)
128
125
 
129
126
  PLATFORMS
@@ -138,4 +135,4 @@ DEPENDENCIES
138
135
  rubocop (~> 1.21)
139
136
 
140
137
  BUNDLED WITH
141
- 2.3.22
138
+ 2.4.13
data/README.md CHANGED
@@ -8,6 +8,8 @@ Gain visibility on your Rails application data model and identify bottlenecks. I
8
8
 
9
9
  ![Graph](graph.svg "Graph")
10
10
 
11
+ https://github.com/ahmad-elassuty/rails_graph/assets/4674035/53deb04e-f995-4af6-9496-a873f84b5445
12
+
11
13
  ## Features
12
14
 
13
15
  - Application Databases and Tables
@@ -24,6 +26,7 @@ Gain visibility on your Rails application data model and identify bottlenecks. I
24
26
  - ActiveRecord Abstract models
25
27
  - Class Hierarchy
26
28
  - [Packwerk](https://github.com/Shopify/packwerk) packages (disabled by default)
29
+ - Application Gems (disabled by default)
27
30
 
28
31
  ## Installation
29
32
 
@@ -59,23 +62,28 @@ You can control what RailsGraph will include in the final graph by:
59
62
  # config/initializers/rails_graph.rb
60
63
 
61
64
  RailsGraph.configure do |config|
62
- # Configure extra classes that are not loaded automatically
65
+ # Explicitly define classes that are not loaded automatically
63
66
  config.include_classes = [ActsAsTaggableOn::Tag, ActsAsTaggableOn::Tagging]
64
67
 
65
- # Configure Columns parsing
68
+ # Enable Columns visualisation
66
69
  # default false
67
70
  config.columns = true
68
71
 
69
- # Configure Class Hierarchy parsing
72
+ # Enable Class Hierarchy visualisation
73
+ # default true
70
74
  config.inheritance = true
71
75
 
72
- # Configure Database entities
76
+ # Enable Databases visualisation
73
77
  # default true
74
- config.database = false
78
+ config.databases = false
75
79
 
76
- # Configure inclusion of Packwerk packages
80
+ # Enable Packwerk packages visualisation
77
81
  # default false
78
82
  config.include_packwerk = true
83
+
84
+ # Enable Gems visualisation
85
+ # default false
86
+ config.gems = true
79
87
  end
80
88
  ```
81
89
 
@@ -7,6 +7,7 @@ require_relative "../graph/relationship"
7
7
  require_relative "../graph/nodes/abstract_model"
8
8
  require_relative "../graph/nodes/column"
9
9
  require_relative "../graph/nodes/database"
10
+ require_relative "../graph/nodes/gem"
10
11
  require_relative "../graph/nodes/model"
11
12
  require_relative "../graph/nodes/pack"
12
13
  require_relative "../graph/nodes/table"
@@ -21,9 +22,11 @@ require_relative "../graph/relationships/pack_model"
21
22
  require_relative "../helpers/associations"
22
23
  require_relative "../helpers/models"
23
24
 
25
+ require_relative "./builders/associations"
24
26
  require_relative "./builders/models"
25
27
  require_relative "./builders/packs"
26
28
  require_relative "./builders/databases"
29
+ require_relative "./builders/gems_builder"
27
30
 
28
31
  module RailsGraph
29
32
  module Commands
@@ -35,21 +38,24 @@ module RailsGraph
35
38
  def call
36
39
  setup_generic_nodes
37
40
 
38
- RailsGraph::Commands::Builders::Databases.enrich(graph: graph) if configuration.databases?
39
- RailsGraph::Commands::Builders::Models.enrich(graph: graph, classes: classes, configuration: configuration)
40
- RailsGraph::Commands::Builders::Packs.enrich(graph: graph) if configuration.include_packwerk?
41
+ RailsGraph::Commands::Builders::GemsBuilder.enrich(graph: graph, configuration: configuration)
42
+ RailsGraph::Commands::Builders::Databases.enrich(graph: graph, configuration: configuration)
43
+ RailsGraph::Commands::Builders::Models.enrich(inspector: inspector, graph: graph, classes: classes,
44
+ configuration: configuration)
45
+ RailsGraph::Commands::Builders::Packs.enrich(graph: graph, configuration: configuration)
41
46
 
42
47
  graph
43
48
  end
44
49
 
45
50
  private
46
51
 
47
- attr_reader :configuration, :classes, :graph
52
+ attr_reader :configuration, :classes, :graph, :inspector
48
53
 
49
54
  def initialize(configuration:)
50
55
  @configuration = configuration
51
56
  @classes = ActiveRecord::Base.descendants + configuration.include_classes
52
57
  @graph = RailsGraph::Graph::Graph.new
58
+ @inspector = RailsGraph::Inspector.new
53
59
  end
54
60
 
55
61
  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,7 +4,9 @@ module RailsGraph
4
4
  module Commands
5
5
  module Builders
6
6
  class Databases
7
- def self.enrich(graph:)
7
+ def self.enrich(graph:, configuration:)
8
+ return unless configuration.databases?
9
+
8
10
  new(graph: graph).enrich
9
11
 
10
12
  graph
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsGraph
4
+ module Commands
5
+ module Builders
6
+ class GemsBuilder
7
+ def self.enrich(graph:, configuration:)
8
+ return unless configuration.gems?
9
+
10
+ new(graph: graph).enrich
11
+
12
+ graph
13
+ end
14
+
15
+ def enrich
16
+ build_gems_nodes
17
+
18
+ gems.each do |specifications|
19
+ source_node = graph.node("gem_#{specifications.name}")
20
+
21
+ # build_authored_by_relationships(specifications, source_node)
22
+ build_depends_on_gem_relationships(specifications, source_node)
23
+ end
24
+ end
25
+
26
+ private
27
+
28
+ attr_reader :graph
29
+
30
+ def initialize(graph:)
31
+ @graph = graph
32
+ end
33
+
34
+ def build_gems_nodes
35
+ gems.each do |gem|
36
+ node = RailsGraph::Graph::Nodes::Gem.new(gem)
37
+ graph.add_node(node)
38
+ end
39
+ end
40
+
41
+ # def build_authored_by_relationships(specifications); end
42
+
43
+ def build_depends_on_gem_relationships(specifications, source_node)
44
+ specifications.dependencies.each do |dependency|
45
+ target_node = graph.node("gem_#{dependency.name}")
46
+ add_depends_on_gem_relationship(source_node, target_node, dependency)
47
+ end
48
+ end
49
+
50
+ def add_depends_on_gem_relationship(source_node, target_node, dependency)
51
+ relationship = RailsGraph::Graph::Relationship.new(
52
+ source: source_node,
53
+ target: target_node,
54
+ label: "DependsOnGem",
55
+ name: "depends_on_gem",
56
+ properties: { type: dependency.type, requirement: dependency.requirement.to_s }
57
+ )
58
+
59
+ graph.add_relationship(relationship)
60
+ end
61
+
62
+ def gems
63
+ @gems ||= Gem::Specification.all
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -4,25 +4,29 @@ module RailsGraph
4
4
  module Commands
5
5
  module Builders
6
6
  class Models
7
- def self.enrich(graph:, classes:, configuration:)
8
- new(graph: graph, classes: classes, configuration: configuration).enrich
7
+ attr_reader :graph, :inspector
9
8
 
10
- graph
9
+ def self.enrich(...)
10
+ new(...).enrich
11
11
  end
12
12
 
13
13
  def enrich
14
14
  build_model_nodes
15
- build_associations_relationships
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 :graph, :classes, :configuration
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 build_associations_relationships
45
- classes.each do |model|
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
@@ -4,7 +4,9 @@ module RailsGraph
4
4
  module Commands
5
5
  module Builders
6
6
  class Packs
7
- def self.enrich(graph:)
7
+ def self.enrich(graph:, configuration:)
8
+ return unless configuration.include_packwerk?
9
+
8
10
  new(graph: graph).enrich
9
11
 
10
12
  graph
@@ -3,7 +3,7 @@
3
3
  module RailsGraph
4
4
  class Configuration
5
5
  attr_reader :include_classes
6
- attr_writer :columns, :inheritance, :include_packwerk, :databases
6
+ attr_writer :columns, :inheritance, :include_packwerk, :databases, :gems
7
7
 
8
8
  def initialize
9
9
  @include_classes = []
@@ -11,6 +11,7 @@ module RailsGraph
11
11
  @databases = true
12
12
  @columns = false
13
13
  @inheritance = true
14
+ @gems = false
14
15
  end
15
16
 
16
17
  def include_classes=(include_classes)
@@ -32,5 +33,9 @@ module RailsGraph
32
33
  def databases?
33
34
  @databases
34
35
  end
36
+
37
+ def gems?
38
+ @gems
39
+ end
35
40
  end
36
41
  end
@@ -32,7 +32,7 @@ module RailsGraph
32
32
 
33
33
  item.properties.each do |k, v|
34
34
  formatted_value = case v
35
- when String, Symbol then "'#{v}'"
35
+ when String, Symbol then "'#{escape_quotes(v)}'"
36
36
  when nil then "null"
37
37
  else v.to_s
38
38
  end
@@ -57,6 +57,12 @@ module RailsGraph
57
57
 
58
58
  "CREATE (#{source_ref})-[:#{relationship.label} {#{format_properties(relationship)}}]->(#{target_ref})"
59
59
  end
60
+
61
+ def self.escape_quotes(value)
62
+ return value if value.is_a? Symbol
63
+
64
+ value.gsub("'") { "\\'" }
65
+ end
60
66
  end
61
67
  end
62
68
  end
@@ -28,8 +28,8 @@ module RailsGraph
28
28
  replica: configs.replica? || false,
29
29
  database_name: configs.database,
30
30
  reaping_frequency: configs.reaping_frequency,
31
- min_threads: configs.min_threads,
32
- max_threads: configs.max_threads
31
+ min_threads: configs.try(:min_threads),
32
+ max_threads: configs.try(:max_threads)
33
33
  }
34
34
  end
35
35
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../node"
4
+
5
+ module RailsGraph
6
+ module Graph
7
+ module Nodes
8
+ class Gem < Node
9
+ attr_reader :specifications
10
+
11
+ def initialize(specifications)
12
+ @specifications = specifications
13
+
14
+ super(labels: "Gem", name: specifications.name, properties: build_properties)
15
+ end
16
+
17
+ def identifier
18
+ "gem_#{name}"
19
+ end
20
+
21
+ private
22
+
23
+ def build_properties
24
+ {
25
+ description: specifications.description,
26
+ summary: specifications.summary,
27
+ homepage: specifications.homepage,
28
+ version: specifications.version.to_s,
29
+ licenses: specifications.licenses
30
+ }
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -6,6 +6,8 @@ module RailsGraph
6
6
  module_function
7
7
 
8
8
  def identifier(model)
9
+ return unless model
10
+
9
11
  model.to_s.delete_prefix("::")
10
12
  end
11
13
  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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsGraph
4
- VERSION = "0.2.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/rails_graph.rb CHANGED
@@ -7,6 +7,7 @@ require "rails_graph/railtie"
7
7
 
8
8
  require "rails_graph/commands/build_graph"
9
9
  require "rails_graph/commands/export_graph"
10
+ require "rails_graph/inspector"
10
11
 
11
12
  module RailsGraph
12
13
  module_function
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.2.0
4
+ version: 0.4.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-22 00:00:00.000000000 Z
11
+ date: 2024-04-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -17,9 +17,6 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '6.0'
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: '7.1'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,23 +24,20 @@ dependencies:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '6.0'
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: '7.1'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: neo4j-ruby-driver
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - ">="
38
32
  - !ruby/object:Gem::Version
39
- version: 4.4.0.alpha.8
33
+ version: '4.4'
40
34
  type: :runtime
41
35
  prerelease: false
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
38
  - - ">="
45
39
  - !ruby/object:Gem::Version
46
- version: 4.4.0.alpha.8
40
+ version: '4.4'
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: railties
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -51,9 +45,6 @@ dependencies:
51
45
  - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '6.0'
54
- - - "<"
55
- - !ruby/object:Gem::Version
56
- version: '7.1'
57
48
  type: :runtime
58
49
  prerelease: false
59
50
  version_requirements: !ruby/object:Gem::Requirement
@@ -61,9 +52,6 @@ dependencies:
61
52
  - - ">="
62
53
  - !ruby/object:Gem::Version
63
54
  version: '6.0'
64
- - - "<"
65
- - !ruby/object:Gem::Version
66
- version: '7.1'
67
55
  description:
68
56
  email:
69
57
  - ahmad.elassuty@gmail.com
@@ -85,7 +73,9 @@ files:
85
73
  - graph.svg
86
74
  - lib/rails_graph.rb
87
75
  - lib/rails_graph/commands/build_graph.rb
76
+ - lib/rails_graph/commands/builders/associations.rb
88
77
  - lib/rails_graph/commands/builders/databases.rb
78
+ - lib/rails_graph/commands/builders/gems_builder.rb
89
79
  - lib/rails_graph/commands/builders/models.rb
90
80
  - lib/rails_graph/commands/builders/packs.rb
91
81
  - lib/rails_graph/commands/export_graph.rb
@@ -101,6 +91,7 @@ files:
101
91
  - lib/rails_graph/graph/nodes/abstract_model.rb
102
92
  - lib/rails_graph/graph/nodes/column.rb
103
93
  - lib/rails_graph/graph/nodes/database.rb
94
+ - lib/rails_graph/graph/nodes/gem.rb
104
95
  - lib/rails_graph/graph/nodes/model.rb
105
96
  - lib/rails_graph/graph/nodes/pack.rb
106
97
  - lib/rails_graph/graph/nodes/table.rb
@@ -114,6 +105,7 @@ files:
114
105
  - lib/rails_graph/helpers/associations.rb
115
106
  - lib/rails_graph/helpers/models.rb
116
107
  - lib/rails_graph/helpers/options_parser.rb
108
+ - lib/rails_graph/inspector.rb
117
109
  - lib/rails_graph/railtie.rb
118
110
  - lib/rails_graph/tasks/rails_graph.rake
119
111
  - lib/rails_graph/version.rb
@@ -141,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
141
133
  - !ruby/object:Gem::Version
142
134
  version: '0'
143
135
  requirements: []
144
- rubygems_version: 3.3.7
136
+ rubygems_version: 3.4.19
145
137
  signing_key:
146
138
  specification_version: 4
147
139
  summary: Graph visualization for Rails applications.