Module: Relix::Index::Ordering
- Defined in:
- lib/relix/index.rb
Instance Method Summary collapse
- #initialize(*args) ⇒ Object
- #range_from_options(r, options, value = nil) ⇒ Object
- #score(object, value) ⇒ Object
- #score_for_value(value) ⇒ Object
Instance Method Details
#initialize(*args) ⇒ Object
93 94 95 96 |
# File 'lib/relix/index.rb', line 93 def initialize(*args) super @order = @options[:order] end |
#range_from_options(r, options, value = nil) ⇒ Object
125 126 127 128 129 130 131 132 |
# File 'lib/relix/index.rb', line 125 def (r, , value=nil) start = ([:offset] || 0) if f = [:from] start = (position(r, f, value) + 1) end stop = ([:limit] ? (start + [:limit] - 1) : -1) [start, stop] end |
#score(object, value) ⇒ Object
98 99 100 101 102 103 104 |
# File 'lib/relix/index.rb', line 98 def score(object, value) if @order value = object.send(@order) end score_for_value(value) end |
#score_for_value(value) ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/relix/index.rb', line 106 def score_for_value(value) case value when Numeric value when Time value.to_f else if value.respond_to?(:to_i) value.to_i elsif value.respond_to?(:to_time) value.to_time.to_f elsif @order raise UnorderableValueError.new("Unable to convert #{value} in to a number for ordering.") else 0 end end end |