1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Meta
  @array = [:a,:b]

  def self.method_missing(name, *args, &block)
    if @array.include? name
      puts "defining #{name}"
      class <<self
        self
      end.send(:define_method, name) do
        do_call(name)
      end
    else
      puts "[#{name.inspect}] is not part of array!"
    end
  end

  def self.do_call arg
    puts "doing call for ['#{arg}'] "
  end
end

Meta.a # prints: defining a
Meta.a # prints: doing call for a