Sha256: 7326f7b94d3ae749a3f369cef72beb9ef295ebb8281f8711d5b3c721e77f6f97

Contents?: true

Size: 1013 Bytes

Versions: 2

Compression:

Stored size: 1013 Bytes

Contents

# frozen_string_literal: true

module CypressRails
  class Middleware
    def initialize(app)
      @app = app
    end

    def call(env)
      request = Rack::Request.new(env)

      if cypress_rails_url?(request.path)
        setup! if setup_url?(request.path)
        execute_script!(request) if scripts_url?(request.path)
        return [
          201,
          { "Content-Type" => "text/html" },
          [""]
        ]
      end

      @app.call(env)
    end

    private

    def cypress_rails_url?(path)
      path.starts_with?("/__cypress_rails__")
    end

    def setup_url?(path)
      path.gsub("/__cypress_rails__/", "") == "setup"
    end

    def scripts_url?(path)
      path.gsub("/__cypress_rails__/", "") == "scripts"
    end

    def setup!
      reset_db!
    end

    def execute_script!(request)
      body = JSON.parse(request.body.read)
      CypressRails.scripts(body.fetch("name")).call
    end

    def reset_db!
      CypressRails.configuration.before_each.call
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cypress_rails-0.4.2 lib/cypress_rails/middleware.rb
cypress_rails-0.4.1 lib/cypress_rails/middleware.rb