Embed Directive in Ruby

Here’s the translation of the Go code to Ruby, formatted in Markdown suitable for Hugo:

Our example demonstrates how to embed files and folders into a Ruby program. While Ruby doesn’t have a direct equivalent to Go’s //go:embed directive, we can achieve similar functionality using Ruby’s built-in methods.

# In Ruby, we don't need to import packages like in Go.
# Instead, we can use built-in methods to read files.

# Read the contents of a single file into a string
file_string = File.read('folder/single_file.txt')

# Read the contents of a single file into a byte array
file_byte = File.binread('folder/single_file.txt')

# In Ruby, we don't have an equivalent to Go's embed.FS.
# Instead, we can use Dir.glob to get a list of files matching a pattern
folder_files = Dir.glob('folder/*.hash')

def main
  # Print out the contents of 'single_file.txt'
  print file_string
  print file_byte

  # Retrieve some files from the folder
  content1 = File.read('folder/file1.hash')
  print content1

  content2 = File.read('folder/file2.hash')
  print content2
end

main

To set up the files for this example, you can use the following shell commands:

$ mkdir -p folder
$ echo "hello ruby" > folder/single_file.txt
$ echo "123" > folder/file1.hash
$ echo "456" > folder/file2.hash

Then run the Ruby script:

$ ruby embed_files.rb
hello ruby
hello ruby
123
456

In this Ruby version, we use File.read to read the contents of files into strings, and File.binread to read into byte arrays. We use Dir.glob to get a list of files matching a pattern, which is similar to the wildcard functionality in the Go example.

Note that Ruby doesn’t have a built-in way to embed files at compile time like Go does. The files are read at runtime in this Ruby example. If you need to distribute your Ruby program with embedded files, you might consider using a gem like bindata or creating a custom solution to package the files with your script.

Ruby’s approach is more straightforward for simple file reading, but it doesn’t provide the same level of compile-time embedding that Go’s embed package offers. However, for many use cases, this runtime file reading in Ruby is sufficient and easy to use.