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
         |