baraviz 0.6.pre → 0.7
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/baraviz.gemspec +1 -0
- data/lib/baraviz/cucumber_formatter.rb +10 -4
- data/lib/baraviz/observer.rb +54 -11
- data/lib/baraviz/screenshot_observer.rb +31 -0
- data/lib/baraviz/version.rb +1 -1
- metadata +19 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1ca77798ad727c9d667210f2a80c436f33dfc3a0
         | 
| 4 | 
            +
              data.tar.gz: f9bd0856938c22c7a48a2d0523099977c8601cbe
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 752736d2a33dc3d7270a3e89f9f980437ded814f2f4ba4573e640eea2ea0936988faf6eef279ed63bb01c620e8136a48107c891b566d827129b1dcae59d362d3
         | 
| 7 | 
            +
              data.tar.gz: ce02663831dd584bf59bb81665c86f7195fa59c83c99777c62744f4049f4c2fc6029d5a46032df624810ba1bb4e4e224c8ab3b7fa9803aeb5fd214a5e550e8f0
         | 
    
        data/baraviz.gemspec
    CHANGED
    
    | @@ -21,6 +21,7 @@ Gem::Specification.new do |spec| | |
| 21 21 |  | 
| 22 22 | 
             
              spec.add_dependency 'capybara', '>= 0.3.5'
         | 
| 23 23 | 
             
              spec.add_dependency 'rgl', '>= 0.4'
         | 
| 24 | 
            +
              spec.add_dependency 'capybara-screenshot', '>= 1.0'
         | 
| 24 25 | 
             
              spec.add_development_dependency 'bundler', '~> 1.16'
         | 
| 25 26 | 
             
              spec.add_development_dependency 'rake', '~> 10.0'
         | 
| 26 27 | 
             
            end
         | 
| @@ -1,24 +1,30 @@ | |
| 1 1 | 
             
            require 'cucumber/formatter/io'
         | 
| 2 2 | 
             
            require 'rgl/dot'
         | 
| 3 | 
            -
            require_relative ' | 
| 3 | 
            +
            require_relative 'screenshot_observer'
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Baraviz
         | 
| 6 6 | 
             
              class CucumberFormatter
         | 
| 7 7 | 
             
                include Cucumber::Formatter::Io
         | 
| 8 8 |  | 
| 9 9 | 
             
                def initialize config
         | 
| 10 | 
            -
                  @io =  | 
| 10 | 
            +
                  @io = ensure_file config.out_stream, Baraviz.name
         | 
| 11 11 | 
             
                  config.on_event :test_run_started,  &method(:on_test_run_started)
         | 
| 12 12 | 
             
                  config.on_event :test_run_finished, &method(:on_test_run_finished)
         | 
| 13 | 
            +
                  config.on_event :test_case_finished, &method(:on_test_case_finished)
         | 
| 13 14 | 
             
                end
         | 
| 14 15 |  | 
| 15 16 | 
             
                def on_test_run_started event
         | 
| 16 | 
            -
                   | 
| 17 | 
            +
                  screenshot_dir = File.dirname @io.path
         | 
| 18 | 
            +
                  @observer = Baraviz::ScreenshotObserver.new Capybara.current_session, screenshot_dir
         | 
| 17 19 | 
             
                end
         | 
| 18 20 |  | 
| 19 21 | 
             
                def on_test_run_finished event
         | 
| 20 | 
            -
                  @io.write @observer. | 
| 22 | 
            +
                  @io.write @observer.graph.to_s
         | 
| 21 23 | 
             
                  @io.close
         | 
| 22 24 | 
             
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def on_test_case_finished event
         | 
| 27 | 
            +
                  @observer.forget_next!
         | 
| 28 | 
            +
                end
         | 
| 23 29 | 
             
              end
         | 
| 24 30 | 
             
            end
         | 
    
        data/lib/baraviz/observer.rb
    CHANGED
    
    | @@ -4,10 +4,12 @@ require 'capybara' | |
| 4 4 |  | 
| 5 5 | 
             
            module Baraviz
         | 
| 6 6 | 
             
              class Observer
         | 
| 7 | 
            -
                 | 
| 7 | 
            +
                attr_accessor :external_call
         | 
| 8 8 |  | 
| 9 9 | 
             
                def initialize session
         | 
| 10 10 | 
             
                  @graph = RGL::DirectedAdjacencyGraph.new
         | 
| 11 | 
            +
                  @forget_next = false
         | 
| 12 | 
            +
                  @external_call = true
         | 
| 11 13 | 
             
                  install_capybara_hooks! session
         | 
| 12 14 | 
             
                end
         | 
| 13 15 |  | 
| @@ -16,21 +18,62 @@ module Baraviz | |
| 16 18 | 
             
                  Capybara::Session::DSL_METHODS.each do |method|
         | 
| 17 19 | 
             
                    session.define_singleton_method :"_#{method}_old", &session.method(method)
         | 
| 18 20 | 
             
                    session.define_singleton_method method do |*args, &block|
         | 
| 19 | 
            -
                       | 
| 20 | 
            -
                       | 
| 21 | 
            -
                      new_page = session.method(:"_current_url_old").call
         | 
| 21 | 
            +
                      external_call = this.external_call
         | 
| 22 | 
            +
                      this.external_call = false
         | 
| 22 23 |  | 
| 23 | 
            -
                       | 
| 24 | 
            -
                         | 
| 25 | 
            -
             | 
| 24 | 
            +
                      begin
         | 
| 25 | 
            +
                        old_page = session.method(:"_current_url_old").call
         | 
| 26 | 
            +
                        this.observe_page old_page if external_call
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                        result = session.method(:"_#{method}_old").call(*args, &block)
         | 
| 29 | 
            +
                        new_page = session.method(:"_current_url_old").call
         | 
| 30 | 
            +
                        this.observe_page new_page if external_call
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                        if external_call && old_page != new_page
         | 
| 33 | 
            +
                          this.observe_page_change old_page, new_page
         | 
| 34 | 
            +
                        end
         | 
| 26 35 |  | 
| 27 | 
            -
             | 
| 36 | 
            +
                        result
         | 
| 37 | 
            +
                      ensure
         | 
| 38 | 
            +
                        this.external_call = true if external_call
         | 
| 39 | 
            +
                      end
         | 
| 28 40 | 
             
                    end
         | 
| 29 41 | 
             
                  end
         | 
| 30 42 | 
             
                end
         | 
| 31 43 |  | 
| 44 | 
            +
                def forget_next!
         | 
| 45 | 
            +
                  @forget_next = true
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                def observe_page page
         | 
| 49 | 
            +
                  # Called for subclasses
         | 
| 50 | 
            +
                end
         | 
| 51 | 
            +
             | 
| 32 52 | 
             
                def observe_page_change old_page, new_page
         | 
| 33 | 
            -
                  @graph.add_edge old_page, new_page
         | 
| 53 | 
            +
                  @graph.add_edge old_page, new_page unless @forget_next
         | 
| 54 | 
            +
                  @forget_next = false
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def make_node v
         | 
| 58 | 
            +
                  uri = URI.parse v.to_s
         | 
| 59 | 
            +
                  RGL::DOT::Node.new({'name' => v, 'label' => uri.path})
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                def make_edge u, v
         | 
| 63 | 
            +
                  RGL::DOT::DirectedEdge.new('from' => u, 'to' => v)
         | 
| 64 | 
            +
                end
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                def graph
         | 
| 67 | 
            +
                  graph = RGL::DOT::Digraph.new
         | 
| 68 | 
            +
                  @graph.each_vertex do |v|
         | 
| 69 | 
            +
                    graph << make_node(v)
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  @graph.each_edge do |u, v|
         | 
| 73 | 
            +
                    graph << make_edge(u, v)
         | 
| 74 | 
            +
                  end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  graph
         | 
| 34 77 | 
             
                end
         | 
| 35 78 |  | 
| 36 79 | 
             
                def clustered_graph
         | 
| @@ -41,13 +84,13 @@ module Baraviz | |
| 41 84 | 
             
                  @graph.each_vertex do |v|
         | 
| 42 85 | 
             
                    uri = URI.parse v.to_s
         | 
| 43 86 | 
             
                    subgraph = subgraphs[[uri.host, uri.port]]
         | 
| 44 | 
            -
                    subgraph <<  | 
| 87 | 
            +
                    subgraph << make_node(v)
         | 
| 45 88 | 
             
                  end
         | 
| 46 89 |  | 
| 47 90 | 
             
                  graph = RGL::DOT::Digraph.new
         | 
| 48 91 | 
             
                  subgraphs.values.each &graph.method(:<<)
         | 
| 49 92 | 
             
                  @graph.each_edge do |u, v|
         | 
| 50 | 
            -
                    graph <<  | 
| 93 | 
            +
                    graph << make_edge(u, v)
         | 
| 51 94 | 
             
                  end
         | 
| 52 95 |  | 
| 53 96 | 
             
                  graph
         | 
| @@ -0,0 +1,31 @@ | |
| 1 | 
            +
            require 'capybara-screenshot'
         | 
| 2 | 
            +
            require_relative 'observer'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Baraviz
         | 
| 5 | 
            +
              class ScreenshotObserver < Observer
         | 
| 6 | 
            +
                def initialize session, screenshot_dir
         | 
| 7 | 
            +
                  @screenshots = {}
         | 
| 8 | 
            +
                  @dir = screenshot_dir
         | 
| 9 | 
            +
                  super session
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def observe_page page
         | 
| 13 | 
            +
                  @screenshots[page] ||= take_screenshot
         | 
| 14 | 
            +
                  super
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def take_screenshot
         | 
| 18 | 
            +
                  path = File.join @dir, "#{Capybara.current_url.gsub(/[^A-Za-z0-9_\-]/, '-')}.png"
         | 
| 19 | 
            +
                  result = Capybara::Screenshot.registered_drivers.fetch(Capybara.current_driver) do |driver_name|
         | 
| 20 | 
            +
                    warn "capybara-screenshot could not detect a screenshot driver for '#{Capybara.current_driver}'. Saving with default with unknown results."
         | 
| 21 | 
            +
                    Capybara::Screenshot.registered_drivers[:default]
         | 
| 22 | 
            +
                  end.call(Capybara.page.driver, path)
         | 
| 23 | 
            +
                  if (result == :not_supported) then nil else File.basename(path) end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                def make_node v
         | 
| 27 | 
            +
                  uri = URI.parse v.to_s
         | 
| 28 | 
            +
                  RGL::DOT::Node.new({'name' => v, 'label' => uri.path, 'image' => @screenshots[v], 'URL' => @screenshots[v]}, RGL::DOT::NODE_OPTS + ['image'])
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
            end
         | 
    
        data/lib/baraviz/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: baraviz
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: '0.7'
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Simon Worthington
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018- | 
| 11 | 
            +
            date: 2018-10-02 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: capybara
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0.4'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: capybara-screenshot
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '1.0'
         | 
| 48 | 
            +
              type: :runtime
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '1.0'
         | 
| 41 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 56 | 
             
              name: bundler
         | 
| 43 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -80,6 +94,7 @@ files: | |
| 80 94 | 
             
            - lib/baraviz.rb
         | 
| 81 95 | 
             
            - lib/baraviz/cucumber_formatter.rb
         | 
| 82 96 | 
             
            - lib/baraviz/observer.rb
         | 
| 97 | 
            +
            - lib/baraviz/screenshot_observer.rb
         | 
| 83 98 | 
             
            - lib/baraviz/version.rb
         | 
| 84 99 | 
             
            homepage: https://github.com/simonwo/baraviz
         | 
| 85 100 | 
             
            licenses:
         | 
| @@ -96,9 +111,9 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 96 111 | 
             
                  version: '0'
         | 
| 97 112 | 
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 98 113 | 
             
              requirements:
         | 
| 99 | 
            -
              - - " | 
| 114 | 
            +
              - - ">="
         | 
| 100 115 | 
             
                - !ruby/object:Gem::Version
         | 
| 101 | 
            -
                  version:  | 
| 116 | 
            +
                  version: '0'
         | 
| 102 117 | 
             
            requirements: []
         | 
| 103 118 | 
             
            rubyforge_project: 
         | 
| 104 119 | 
             
            rubygems_version: 2.6.13
         |