# LibTmux::Async::Scope#map

- **Module:** LibTmux::Async
- **Package:** libtmux-async
- **Language:** Ruby
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-ruby/blob/da7b6191b9439e3c84fa1c9eeaa9168263ee7af4/gems/libtmux-async/lib/libtmux/async/scope.rb#L104
- **Page:** https://libtmux.org/en/ruby/v0.1.1/reference/libtmux-async-scope-map/

```
def map: [Input, Output] (
  ::Enumerable[Input],
  ?concurrency: ::Integer,
  ?max_items: ::Integer,
  ?max_bytes: ::Integer,
  ?result_bytes: ^(Output) -> ::Integer
) {
  (Input) -> Output
} -> ::Array[Output]
```

Behavior: Async map.

Behavior contract: Async map.

## Examples

Open an Async scope over an existing server and capture every pane concurrently, in input order. Use Ruby 3.3 or newer with Bundler, and tmux 3.3a or newer, on Unix with `/bin/cat` and `/bin/sh` available. In an empty directory, save this `Gemfile`:

```ruby
source "https://rubygems.org"

gem "libtmux-async", "0.1.1"
```

Save this complete program as `async_scope.rb`. Its `Server.start` block owns a private tmux server and stops it on exit, including after an error.

[Source example](https://github.com/libtmux/libtmux-ruby/blob/da7b6191b9439e3c84fa1c9eeaa9168263ee7af4/examples/api/async_scope.rb).

```ruby
# frozen_string_literal: true

begin
  # docs:begin main
  require "libtmux"
  require "libtmux/async"

  LibTmux::Server.start do |server|
    server.new_session(name: "work", command: ["/bin/cat"])
    server.new_session(name: "logs", command: ["/bin/cat"])
    Async do |parent|
      LibTmux::Async.open(parent: parent, server: server) do |scope|
        refs = scope.server.list_panes.map(&:ref)
        screens = scope.map(refs, concurrency: 2) { |ref| scope.server.pane(ref).capture }
        puts "captured panes: #{screens.length}"
        puts "all succeeded: #{screens.all?(&:success?)}"
      end
    end.wait
  end
  # docs:end main
rescue StandardError => error
  warn "#{error.class}: #{error.message}"
  exit 1
end
```

Install the gem and run the program. An operation or cleanup error makes it exit unsuccessfully:

```console
$ bundle install && \
  bundle exec ruby async_scope.rb
```

Expected output:

```text
captured panes: 2
all succeeded: true
```

## Type parameters

- `Input`
- `Output`

## Parameters

- `arg1` (`::Enumerable[Input]`)
- `concurrency` (`::Integer`)
- `max_items` (`::Integer`)
- `max_bytes` (`::Integer`)
- `result_bytes` (`^(Output) -> ::Integer`)

## Raises

- `ArgumentError`

## Guides

Pages that discuss `map`.

- [Async](/en/ruby/v0.1.1/guides/async/)
