Ruby Technique: Meta Programming

Posted in Programming, Ruby on Mar 02, 2008

Meta Programming is code that writes code. See the code sample below.
I have made a screencast of this process. View it here

#!/usr/bin/env ruby

class Product
  def initialize(items)
    items.each {|item| Product.product(item) }
  end

  def self.product(item)
    code = %Q{
      def add_#{item}(item)
        @#{item} = [] unless @#{item}
        @#{item} << item
      end

      def display_#{item}s
        @#{item}.each {|item| puts item }
      end
    }
    class_eval(code)
  end
end

class Item < Product
  def initialize(*items)
    super(items)
  end
end

cart = Item.new(:book, :computer, :music)
cart.add_book(:Ruby) # => Add a book to our cart items

cart.display_books # => We want to display All books we have added
puts "\n"

cart.add_computer(:Apple)
cart.add_computer( :D ell)
cart.add_computer(:Sony)
cart.display_computers # => Display All Computers
puts "\n"

cart.add_music(’Modest Mouse‘)
cart.add_music(’Northstar‘)
cart.display_musics # => Display All Music Items

Trackback URI | Comments RSS

Leave a Reply

  • Recent Comments

    • Gregorio Schrecongost: obviously like your web-site however you need to check the spelling on quite a few of your...
    • ekstra łazienki: 76. I would like to thank you for the efforts you have put in writing this web site. I’m...
    • djcity record pool: Good day! This post could not be written any better! Reading through this post reminds me of my...
    • Aline Shiner: I in addition to my buddies have already been following the excellent secrets from your website while...
    • Eve: Such superb text! No idea how you wrote this report..it’d take me weeks. Well worth it though, I’d assume. Have...

    Recent Listened to Tracks

    Loading...

Bad Behavior has blocked 114 access attempts in the last 7 days.

eastern-avalanche
eastern-avalanche
eastern-avalanche
eastern-avalanche