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])
|