Queue implementation in Ruby

Below is a implementation of Queue with a linked list.

class Queue
    private class Node
        attr_accessor :next, :data

        def initialize(data)
            @data = data
            @next = nil
        end
    end

    def initialize
        @head = nil
        @tail = nil
        @size = 0
    end

    def enqueue(data)
        new_node = Node.new(data)

        if @head == nil
            @head = new_node
            @tail = new_node
            @head.next = @tail
        else
            @tail.next = new_node
            @tail = new_node
        end

        @size += 1
    end

    def dequeue
        if @head != nil
            @head = @head.next
            @size -= 1
        end

        if @size == 0
            @head = nil
            @tail = nil
        end
    end

    def front
        self.empty? ? nil : @head.data

    end
    alias_method :first, :front

    def rear
        self.empty? ? nil : @tail.data
    end
    alias_method :last, :rear

    def empty?
        @size == 0
    end

    def size
        @size
    end
    alias_method :length, :size

    def to_s
        curr = @head

        while curr != nil
            print "#{curr.data} "
            curr = curr.next
        end
        puts
    end
end

queue = Queue.new

queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.to_s

puts "empty? #{queue.empty?}"
puts "size #{queue.size}"

puts "front: #{queue.front}"
puts "first: #{queue.first}"

puts "rear: #{queue.rear}"
puts "last: #{queue.last}"

while !queue.empty? do
    queue.dequeue

    puts "front: #{queue.front}"
    puts "first: #{queue.first}"

    puts "rear: #{queue.rear}"
    puts "last: #{queue.last}"
    puts "size: #{queue.size}"
    puts "empty? #{queue.empty?}"
    puts
end

queue.enqueue(1)
queue.enqueue(3)
queue.enqueue(5)
queue.to_s