Sha256: bff4c8440cd5bd2298e61f30330c24b18ebe50ffe34bb3af4fd3e60370deffcf

Contents?: true

Size: 1.12 KB

Versions: 8

Compression:

Stored size: 1.12 KB

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)
      script = CypressRails.scripts(body.fetch("name"))

      params = body.fetch("params", {})

      if params.any?
        script.call(params)
      else
        script.call
      end
    end

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

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
cypress_rails-0.9.3 lib/cypress_rails/middleware.rb
cypress_rails-0.9.2 lib/cypress_rails/middleware.rb
cypress_rails-0.9.1 lib/cypress_rails/middleware.rb
cypress_rails-0.9.0 lib/cypress_rails/middleware.rb
cypress_rails-0.8.0 lib/cypress_rails/middleware.rb
cypress_rails-0.7.0 lib/cypress_rails/middleware.rb
cypress_rails-0.6.0 lib/cypress_rails/middleware.rb
cypress_rails-0.5.0 lib/cypress_rails/middleware.rb