次のコードはPersonという名前のクラスである。その中、まずinitializeはオブジェクトを初期化するコンストラクタである。ほかに2つのメソッドがあり、1つは比較演算子である<=>をオーバーライドしておりArray#sortによりプロパティageでソートすることができる。もう1つのオーバーライド箇所のto_sメソッドは Kernel#puts での表示の形式を整える。attr_readerは Ruby におけるメタプログラミングの例であり、attr はインスタンス変数の入出力を司る、いわゆる値を取得する getter メソッドや値を設定する setter メソッド（アクセサ）を定義する。attr_readerは getter メソッドのみの定義である。なおメソッド中では最後に評価された式が返り値となり、明示的なreturnは省略できる。class Person  def initialize(name, age)    @name, @age = name, age  end  def <=>(person)    @age <=> person.age  end  def to_s    "#{@name} (#{@age})"  end  attr_reader :name, :ageendgroup = [ Person.new("John", 20),          Person.new("Markus", 63),          Person.new("Ash", 16)        ]puts group.sort.reverse結果は3つの名前が年の大きい順に表示されるMarkus (63)John (20)Ash (16)
クロージャとなるようなブロックの引数渡し# オブジェクトのインスタンス変数（変数名の頭に@が付く）でブロックを記憶。def remember(&p)  @block = pend# nameを受け取るブロックを引数に、上記のメソッドを呼び出す。remember {|name| puts "Hello, " + name + "!"}# 後に必要になった時点でクロージャを呼び出す。@block.call("John")# 表示:"Hello, John!"メソッドからクロージャを返す例def create_set_and_get(value = 0)  return proc {|x| value = x}, proc { value }endsetter, getter = create_set_and_getsetter.call(21)getter.call # => 21
実際に行いたい処理をブロックで記述する。前項の後処理の省力化もこれの一例といえる。def bfs(list)       #配列をツリーに見立てた処理  until list.empty?    unit = list.shift    yield unit      #ブロックの内容を実行    unit.each{|v| list.push v} if defined? unit.push  endendbfs([0,1,[2,3],4,[5,[6,7,8]],9]) {|v| p v}この例は、ツリーから要素と分枝をつぎつぎと取り出して取り出したものになんらかの処理を行うものである。メソッドの利用者は、なんらかの処理のみを記述すればよく、取り出しのアルゴリズムなど、本質的でない内容に意識を向ける必要がなくなる。
ブロックの内容を実行してから、決められた後処理を行うメソッドもあるFile.open('file.txt', 'w+b') do |file|  file.puts 'Wrote some text.'end                             # file.txtはここで自動的に閉じられるこれは次の例と同様の処理を行う（ensure については例外処理の項を参照）begin  file = File.open('file.txt', 'w+b')  file.puts 'Wrote some text.'ensure  file.closeend
配列の各要素への繰り返し処理list = [1, 2, 5, 13, 21]list.map! {|item| item * 2} # listの各要素を2倍する処理以下はブロックを使わずに同じことを行う場合list = [1, 2, 5, 13, 21]n = 0while n < list.length  list[n] *= 2  n += 1end指定した回数の繰り返し処理3.times { puts 'foobar' }       # 制御構造の項のwhileの例と同じ
Ruby ではブロック付きメソッド呼び出しを用いるコードが好まれることが多い。これを用いると、ユーザー定義の制御構造やコールバックなど様々な処理を簡潔に記述できるからである。ブロックとは波括弧 {、} または do、end によって囲まれたコード列のことである。メソッド呼び出しの末尾に記述することが出来る。この2つは基本的に同一だが、結合の優先度が異なる。一行で書くときは波括弧が、複数行に渡る場合はdo、endが使用される場合が多い。# { ... }method1 { puts "Hello, World!" }# do ... endmethod2 do  puts "Hello, world!"endブロック付きメソッド呼び出しが繰り返し処理を主な役割としていたことから、イテレータと呼ばれていた時期がある。しかし、実際には繰り返し処理にとどまらず、様々な使われ方をしているので、最近はブロック付きメソッド呼び出し全体の総称としてイテレータという名称を用いるのは適切でないと考えられている。
ほかの言語でもよくみられるような制御構造を用いることができる。if "fablic".length > 3  puts 'ya'else  puts 'nop'end# 表示:         yalist = [1, 2, 5, 13, 21]for item in list  puts itemend# 表示:         1#               2#               5#               13#               21n = 0while n < 3  puts 'foobar'  n += 1end# 表示:         foobar#               foobar#               foobar一部の制御構造は後述するイテレータで代替することができる。
2010年6月30日発売の青山テルマのシングル「サマーラブ!! feat. RED RICE from 湘南乃風」のミュージック・ビデオの振り付けを担当した。また、あやまんJAPANメンバーが中心になって「ポイポイオールスタースペシャルver」も制作された。同年10月12日に公開された情報サイト『メンズサイゾー』でのインタビューで、CDを発売する事を明かした。同年10月27日によしもとアール・アンド・シーより発売情報が公開された。12月1日にシングル「ぽいぽいぽいぽぽいぽいぽぴー」で歌手デビューを果たした。2011年4月20日に初の映像作品『あやまんJAPANのDVD-ポテトが熱くて食べられない-』を発売。このDVDにはプロモーションシングル「あやまんジェットコースター」を収録したCDが付いている。同年6月1日に発売されたNERDHEADのシングル「どうして好きなんだろう feat. Mai.K」の公式サポーターに選ばれ、YouTubeに応援メッセージを公開し、「ぽいぽいぽいぽぽいぽいぽぴー（切ないVer.）」を披露。同年6月15日にお笑い芸人楽しんごとのコラボレーション配信楽曲「ドドスコぽいぽいのうた」を発表。同年8月10日には、オリエンタルラジオの藤森慎吾とのコラボレーションシングル「夏あげモーション」を発売。10月5日に藤森とのコラボレーション第2弾シングル「失恋ベイビー」を発売。12月7日に、これまでの楽曲とミュージック・ビデオが全て収録されたCD+DVD形態のコンプリートアルバム『ぽいぽい』を発売。