SFTP file transfer for LegionIO. Upload, download, and manage files on SFTP servers from within task chains. Designed for healthcare file exchange (HL7, EDI, FHIR bundles).
gem install lex-sftpOr add to your Gemfile:
gem 'lex-sftp'| Method | Parameters | Description |
|---|---|---|
upload |
local_path:, remote_path:, **opts |
Upload a file to the SFTP server |
download |
remote_path:, local_path:, **opts |
Download a file from the SFTP server |
delete |
remote_path:, **opts |
Remove a file from the SFTP server |
rename |
old_path:, new_path:, **opts |
Rename or move a remote file |
stat |
remote_path:, **opts |
Get file attributes (size, mtime, permissions) |
All methods return { success: true/false, ... } hashes.
| Method | Parameters | Description |
|---|---|---|
list |
remote_path:, **opts |
List directory entries |
mkdir |
remote_path:, **opts |
Create a remote directory |
rmdir |
remote_path:, **opts |
Remove a remote directory |
entries |
remote_path:, pattern: nil, **opts |
Filtered directory listing (glob pattern) |
| Method | Parameters | Description |
|---|---|---|
batch_upload |
files:, remote_dir:, **opts |
Upload an array of local file paths |
batch_download |
files:, local_dir:, **opts |
Download an array of remote file paths |
sync |
local_dir:, remote_dir:, direction: :upload, **opts |
Sync a directory (:upload or :download) |
Pass authentication kwargs alongside other parameters:
| Parameter | Description |
|---|---|
host |
SFTP server hostname or IP |
user |
SFTP username (default: 'sftp') |
port |
SFTP port (default: 22) |
password |
Password authentication |
key_path |
Path to private key file |
key_data |
Inline private key data |
timeout |
Connection timeout in seconds (default: 30) |
Use Legion::Extensions::Sftp::Client outside the full LegionIO framework.
require 'legion/extensions/sftp'
client = Legion::Extensions::Sftp::Client.new(
host: 'sftp.clearinghouse.example.com',
user: 'hl7_sender',
key_path: '/etc/legion/sftp_key'
)
# Upload HL7 message
client.upload(local_path: '/tmp/ADT_A01_20240101.hl7', remote_path: '/inbound/ADT_A01_20240101.hl7')
# List outbound results
result = client.entries(remote_path: '/outbound', pattern: '*.hl7')
result[:entries].each { |e| puts e[:name] }
# Download all results
client.sync(local_dir: '/tmp/results', remote_dir: '/outbound', direction: :download)Constructor: Client.new(**opts). All kwargs are stored and passed through to Net::SFTP on each call.
- Ruby >= 3.4
- SFTP server access
net-sftp~> 4.0
MIT