283: def extractor(map)
284: extracts = []
285: map.each_pair do |target, source|
286: source = extract_value_from(source)
287: target = extract_value_to(target)
288: define_method :__extractor do |element|
289: value = source.call(element)
290: target.call(self, value) if !value.nil?
291: end
292: extracts << instance_method(:__extractor)
293: remove_method :__extractor
294: end
295: lambda do |element|
296: extracts.each do |extract|
297: extract.bind(self).call(element)
298: end
299: true
300: end
301: end