capybara-experience 0.2 → 0.3.2
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/.gitignore +1 -0
- data/capybara-experience.gemspec +2 -0
- data/lib/capybara/experience/pool.rb +54 -0
- data/lib/capybara/experience/rspec.rb +3 -0
- data/lib/capybara/experience/version.rb +1 -1
- data/lib/capybara/experience.rb +22 -15
- metadata +16 -2
- data/lib/capybara/experience/session.rb +0 -57
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 1fa20ed37708148de49cef701b1a01f8bb178e265aa7e90fd5f0669a60850147
         | 
| 4 | 
            +
              data.tar.gz: a7becb3e8c47766a43bc2aa0a5f5ea327042d1b3860342cc4e21ce42966001be
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 299a7d14d66b32ee67f19275bce4ede292e2d29c14faddb0561205fde708a2a8dd65133900dd0dc40eadc0f91f931302fcb72d3d8c198e595f1841f6ae2f1d50
         | 
| 7 | 
            +
              data.tar.gz: 3c6fae1f8bebef030e7ff554b73a30d022c3553de3b75cc0822645f92332507698800ed5c8076ac37441098b9dfeb6e0f8419eefbc04d135809b552b33e0b5dc
         | 
    
        data/.gitignore
    CHANGED
    
    
    
        data/capybara-experience.gemspec
    CHANGED
    
    
| @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            require "singleton"
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Capybara
         | 
| 5 | 
            +
              class Experience
         | 
| 6 | 
            +
                class Pool < Hash
         | 
| 7 | 
            +
                  include Singleton
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def [](key)
         | 
| 10 | 
            +
                    super(key) || begin
         | 
| 11 | 
            +
                      driver, _session_name, app_object_id = key.split(":")
         | 
| 12 | 
            +
                      take(driver: driver, app_object_id: app_object_id, key: key)
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  def take(driver: Capybara.current_driver, app_object_id: Capybara.app.object_id, key: nil)
         | 
| 17 | 
            +
                    session = idle.find { |s| s.mode == driver && s.app.object_id == app_object_id }
         | 
| 18 | 
            +
                    if session
         | 
| 19 | 
            +
                      idle.delete(session)
         | 
| 20 | 
            +
                      self[key] = delete(session_key(session)) if key
         | 
| 21 | 
            +
                    else
         | 
| 22 | 
            +
                      session = ::Capybara::Session.new(driver.to_sym, Capybara.app)
         | 
| 23 | 
            +
                      key ||= session_key(session)
         | 
| 24 | 
            +
                      self[key] = session
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    session
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def idle
         | 
| 31 | 
            +
                    @idle ||= []
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def taken
         | 
| 35 | 
            +
                    values - idle
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def reset_idle!
         | 
| 39 | 
            +
                    dup.each do |key, session|
         | 
| 40 | 
            +
                      self[session_key(session)] = delete(key)
         | 
| 41 | 
            +
                    end
         | 
| 42 | 
            +
                    @idle = values
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    nil
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  private
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                  def session_key(session)
         | 
| 50 | 
            +
                    "#{session.mode}:#{session.object_id}:#{session.app.object_id}"
         | 
| 51 | 
            +
                  end
         | 
| 52 | 
            +
                end
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
            end
         | 
    
        data/lib/capybara/experience.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 | 
             
            require "capybara/dsl"
         | 
| 3 | 
            -
            require "capybara/experience/ | 
| 3 | 
            +
            require "capybara/experience/pool"
         | 
| 4 4 |  | 
| 5 5 | 
             
            module Capybara
         | 
| 6 6 | 
             
              class Experience
         | 
| @@ -23,28 +23,35 @@ module Capybara | |
| 23 23 | 
             
                delegate :driver, to: :page
         | 
| 24 24 |  | 
| 25 25 | 
             
                def page
         | 
| 26 | 
            -
                  @page ||= Experience:: | 
| 26 | 
            +
                  @page ||= Experience::Pool.instance.take(driver: driver_name)
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  Capybara::Screenshot.final_session_name = @page.object_id if defined?(Capybara::Screenshot)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  @page
         | 
| 27 31 | 
             
                end
         | 
| 28 32 |  | 
| 29 33 | 
             
                def self.wait_for_pending_requests
         | 
| 30 | 
            -
                  Experience:: | 
| 34 | 
            +
                  Experience::Pool.taken.each do |session|
         | 
| 31 35 | 
             
                    session.server.try(:wait_for_pending_requests)
         | 
| 32 36 | 
             
                  end
         | 
| 33 37 | 
             
                end
         | 
| 34 38 |  | 
| 35 | 
            -
                 | 
| 36 | 
            -
                  save_and_open_screenshot(path, options.merge(full: true))
         | 
| 37 | 
            -
                end
         | 
| 39 | 
            +
                class Error < StandardError; end
         | 
| 38 40 |  | 
| 39 | 
            -
                 | 
| 40 | 
            -
                   | 
| 41 | 
            -
             | 
| 42 | 
            -
                    document.evaluate('#{xpath}', document, null, XPathResult.ANY_TYPE, null)
         | 
| 43 | 
            -
                      .iterateNext()
         | 
| 44 | 
            -
                      .click()
         | 
| 45 | 
            -
                  JS
         | 
| 46 | 
            -
                end
         | 
| 41 | 
            +
                module UnifySessionPool
         | 
| 42 | 
            +
                  def page
         | 
| 43 | 
            +
                    Capybara::Screenshot.final_session_name = Capybara.session_name if defined?(Capybara::Screenshot)
         | 
| 47 44 |  | 
| 48 | 
            -
             | 
| 45 | 
            +
                    super
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  private
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  def session_pool
         | 
| 51 | 
            +
                    @session_pool ||= Experience::Pool.instance
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
                end
         | 
| 49 54 | 
             
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              singleton_class.prepend Experience::UnifySessionPool
         | 
| 50 57 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: capybara-experience
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 0.3.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Ryan Ong
         | 
| @@ -53,6 +53,20 @@ dependencies: | |
| 53 53 | 
             
                - - "~>"
         | 
| 54 54 | 
             
                  - !ruby/object:Gem::Version
         | 
| 55 55 | 
             
                    version: '3.0'
         | 
| 56 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 57 | 
            +
              name: capybara
         | 
| 58 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 59 | 
            +
                requirements:
         | 
| 60 | 
            +
                - - "~>"
         | 
| 61 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 62 | 
            +
                    version: '3.0'
         | 
| 63 | 
            +
              type: :runtime
         | 
| 64 | 
            +
              prerelease: false
         | 
| 65 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 66 | 
            +
                requirements:
         | 
| 67 | 
            +
                - - "~>"
         | 
| 68 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 69 | 
            +
                    version: '3.0'
         | 
| 56 70 | 
             
            description: Abstractions for Capybara to manage multiple user sessions, encapsulate
         | 
| 57 71 | 
             
              shared test behavior, and semantically contextualize test code.
         | 
| 58 72 | 
             
            email:
         | 
| @@ -73,8 +87,8 @@ files: | |
| 73 87 | 
             
            - capybara-experience.gemspec
         | 
| 74 88 | 
             
            - lib/capybara-experience.rb
         | 
| 75 89 | 
             
            - lib/capybara/experience.rb
         | 
| 90 | 
            +
            - lib/capybara/experience/pool.rb
         | 
| 76 91 | 
             
            - lib/capybara/experience/rspec.rb
         | 
| 77 | 
            -
            - lib/capybara/experience/session.rb
         | 
| 78 92 | 
             
            - lib/capybara/experience/version.rb
         | 
| 79 93 | 
             
            homepage: https://github.com/ryanong/capybara-experience
         | 
| 80 94 | 
             
            licenses: []
         | 
| @@ -1,57 +0,0 @@ | |
| 1 | 
            -
            # frozen_string_literal: true
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            module Capybara
         | 
| 4 | 
            -
              class Experience
         | 
| 5 | 
            -
                module Session
         | 
| 6 | 
            -
                  class << self
         | 
| 7 | 
            -
                    def next(driver:)
         | 
| 8 | 
            -
                      pool.next(driver)
         | 
| 9 | 
            -
                    end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
                    def create(driver)
         | 
| 12 | 
            -
                      ::Capybara::Session.new(driver, Capybara.app)
         | 
| 13 | 
            -
                    end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
                    def pool
         | 
| 16 | 
            -
                      @pool ||= Pool.new
         | 
| 17 | 
            -
                    end
         | 
| 18 | 
            -
                  end
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                  class Pool
         | 
| 21 | 
            -
                    attr_accessor :idle, :taken
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                    def initialize
         | 
| 24 | 
            -
                      @idle = []
         | 
| 25 | 
            -
                      @taken = []
         | 
| 26 | 
            -
                    end
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                    def next(driver)
         | 
| 29 | 
            -
                      take_idle(driver) || create(driver)
         | 
| 30 | 
            -
                    end
         | 
| 31 | 
            -
             | 
| 32 | 
            -
                    def release
         | 
| 33 | 
            -
                      taken.each(&:reset!)
         | 
| 34 | 
            -
                      idle.concat(taken)
         | 
| 35 | 
            -
                      taken.clear
         | 
| 36 | 
            -
                    end
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                    private
         | 
| 39 | 
            -
             | 
| 40 | 
            -
                    def take_idle(driver)
         | 
| 41 | 
            -
                      idle.find { |s| s.mode == driver }.tap do |session|
         | 
| 42 | 
            -
                        if session
         | 
| 43 | 
            -
                          idle.delete(session)
         | 
| 44 | 
            -
                          taken.push(session)
         | 
| 45 | 
            -
                        end
         | 
| 46 | 
            -
                      end
         | 
| 47 | 
            -
                    end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                    def create(driver)
         | 
| 50 | 
            -
                      ::Capybara::Experience::Session.create(driver).tap do |session|
         | 
| 51 | 
            -
                        taken.push(session)
         | 
| 52 | 
            -
                      end
         | 
| 53 | 
            -
                    end
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
                end
         | 
| 56 | 
            -
              end
         | 
| 57 | 
            -
            end
         |