This is a work in progress, but I figured I might as well get started. Here is a list of Ruby things that I’ve found helpful.

Latest stable version of Ruby?

Some ruby installers might not actually have the latest version of ruby, so it is handy to check this page to figure out what exactly is the latest stable version: Download Ruby.

Not always, but usually it is best to be on the latest stable 1 version below the bleeding edge. In this case Ruby 3.2.0 is the latest, but I’m using 3.1.3 as my default ruby.

Installing Ruby

I currently use a combination of ruby-install and chruby.

ruby-install ruby 3.2.2
exec $SHELL
chruby ruby-3.2.2
echo "ruby-3.2.2" > ~/.ruby-version

Ruby Related Resources

Rubular is a site for playing around with regular expressions:

Rename a hash key

hash[:new_key] = hash.delete :old_key


Ensure a Ruby hash is only using symbols

This will convert the hash keys to symbols instead of them being strings.



Hash keys are case sensitive

$ cat case.rb 
h = {
  "asdf" => 1,
  "AsDf" => 2

puts h["asdf"]
puts h["AsDf"]
puts h["aSdF"]
$ ruby case.rb 

Get the first X characters of a string

# "12345"

But this can be a better way

# "12345"

especially if you are storing the string length as a constant like this:

MAX = 5
# "12345"
# "1"

Get the first element in an array

On a related note to using .first on strings you can also use it on arrays:

[1, 2].first
# 1

If you are using Rails you can also use .second:

[1,2,3,4].second    # Rails Only
# 2

or .third:

[1,2,3,4].third     # Rails Only
# 3

but not .forth:

[1,2,3,4].forth     # Not even in Rails
# NoMethodError: undefined method `forth' for #<Array:0x00005583ad7838a0>

However, you can use .forty_two! :rofl:

(1..45).to_a.forty_two     # Rails Only
# 42


Subtracting Days in Ruby

I need a unix timestamp for a specific day. You can do that with .to_i on the Time class, but not with Date
# 1632854844

I also need the unix epoch for different dates, so what I can do is subtract days (in seconds) from
# 2021-09-28 12:43:10.3599796 -0600 - 1 # Don't do this
# 2021-09-28 12:43:17.6062736 -0600 - 1*24*60*60 # (1 Day ago)
# 2021-09-27 12:43:57.8495587 -0600 - 2*24*60*60 # (2 Days ago)
# 2021-09-26 12:44:05.9715538 -0600

( - 3*24*60*60).to_i # (3 Days ago to Unix Epoch)
# 1632595460



As a better alternative to a.count == 0 use .zero?
# true

Remove array element at index

You can use .slice!(index) to remove a specific element from an array.

arr = ['a', 2, 'b']
# ["a", 2, "b"]
# 2
# ["a", "b"]

Faster alternative to Dir.glob

IO.popen("find . -name '*.txt'").each { |path| parse(path.chomp) }


Rails not ruby

Cast to boolean:

[1] pry(main)>"false")
=> false
[2] pry(main)>
=> false


    SiteSetting.defaults.tap do |s|
      s.set_regardless_of_locale(:s3_upload_bucket, 'bucket')
      s.set_regardless_of_locale(:min_post_length, 5)
      s.set_regardless_of_locale(:min_first_post_length, 5)
      s.set_regardless_of_locale(:min_personal_message_post_length, 10)
      s.set_regardless_of_locale(:download_remote_images_to_local, false)
      s.set_regardless_of_locale(:unique_posts_mins, 0)
      s.set_regardless_of_locale(:max_consecutive_replies, 0)
      # disable plugins
      if ENV['LOAD_PLUGINS'] == '1'
        s.set_regardless_of_locale(:discourse_narrative_bot_enabled, false)




To check if a url is https or not you can use .scheme like this:

irb(main):001:0> uri = URI.parse("")
=> #<URI::HTTPS>
irb(main):002:0> uri.scheme
=> "https"
irb(main):003:0> uri.scheme == "https"
=> true


Home Directory

Dir.home - Will return your current home directory. This is handy when writing scripts that will work on Linux, OSX, & Windows.


Dir.chdir - Change the current directory the script is running from.

splitting newlines

I needed to turn the output of a terminal command into an array. Off the top of my head if I didn’t have an active internet connection I would just use .split("\n") but I wanted to see if Ruby had anything better. Turns out they have .lines.

Validating YAML with Ruby command line

ruby -ryaml -e "p YAML.load(" < file.yml