moser/foxtrot_mike

View on GitHub
app/models/string_flight_filter.rb

Summary

Maintainability
A
0 mins
Test Coverage
class StringFlightFilter < FlightFilter
  def initialize(parent, filter_string)
    @parent, @filter_string = [parent, filter_string]
  end

  def flights
    if @filter_string && !@filter_string.blank?
      @parent.flights.select { |flight| matches?(flight) }
    else
      @parent.flights
    end
  end

private
  def matches?(flight)
   filters.map do |filter|
      flight.send(filter[:method]).to_s =~ /#{filter[:value]}/
    end.reduce(&:"&&")
  end

  def filters
    @filter_string.split(',').map(&:strip).map do |str|
      method, value = str.split(':').map(&:strip)
      { method: method.to_sym, value: value }
    end
  end
end