Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
module Sortable
  def sort(options={})
    attributes = options[:attributes].inject("["){|attribute_string, attribute| attribute_string << "object.#{attribute},"} + "]"
    options[:collection].sort_by{|object| eval(attributes)}
  end
end

class Person
  extend Sortable
  attr_accessor :firstname,:lastname,:age
  def initialize(firstname,lastname,age=0)
    @firstname = firstname
    @lastname = lastname
    @age = age
  end

  def name
    "#{@firstname} #{@lastname}"
  end

  def to_s
    "Hello my name is #{name} and my age is #{@age}"
  end
end

people = [Person.new("joe","blow",12),Person.new("joe","blow",89),Person.new("mary","watson",32),Person.new("annie","watson",9),Person.new("bob","builder",12)]

p Person.sort(:collection=>people,:attributes=>[:lastname])
p Person.sort(:collection=>people,:attributes=>[:age])
p Person.sort(:collection=>people,:attributes=>[:lastname,:firstname,:age])