Class: Rank

Inherits:
Object show all
Defined in:
lib/kuku.rb

Instance Method Summary collapse

Constructor Details

#initialize(objects) ⇒ Rank

Returns a new instance of Rank.



125
126
127
128
# File 'lib/kuku.rb', line 125

def initialize objects
  @objects = objects
  @all_rankings = Array.new
end

Instance Method Details

#executeObject



152
153
154
155
156
157
# File 'lib/kuku.rb', line 152

def execute
  @objects.
    collect{|o| RankedObject.new(total_for(o), o)}.
    sort_by{|r| r.rank}.
    collect{|r| r.object}
end

#higher_is_better(criteria) ⇒ Object



132
133
134
# File 'lib/kuku.rb', line 132

def higher_is_better criteria
  rank_reverse true, criteria
end

#lower_is_better(criteria) ⇒ Object



135
136
137
# File 'lib/kuku.rb', line 135

def lower_is_better criteria
  rank_reverse false, criteria 
end

#rank_reverse(do_reverse, criteria) ⇒ Object



138
139
140
141
142
143
144
145
146
# File 'lib/kuku.rb', line 138

def rank_reverse do_reverse, criteria 
  criteria.each{|criterion|
    i = 0
    sorted = @objects.sort_by {|o| eval("o.#{criterion}")}
    sorted = sorted.reverse if do_reverse
    @all_rankings << sorted.collect{|o| RankedObject.new(i+=1, o) }
  }
  self    
end

#sizeObject



129
130
131
# File 'lib/kuku.rb', line 129

def size
  @objects.size
end

#total_for(a) ⇒ Object



147
148
149
150
151
# File 'lib/kuku.rb', line 147

def total_for a
  @all_rankings.collect{|rank| 
    rank.select{|ranked_item| ranked_item.object == a}[0].rank}.
    inject{|sum, i| sum + i}
end