Class: Starline::Entities::DistanceFilter
- Inherits:
-
Object
- Object
- Starline::Entities::DistanceFilter
- Defined in:
- lib/starline/entities/distance_filter.rb
Constant Summary collapse
- FILTERS =
Supported filter names
%i(eq ne gt lt gte lte)
- OPERATORS =
Mapping between filter names and its ruby functions
{ :eq => :==, :ne => :!=, :gt => :>, :lt => :<, :gte => :>=, :lte => :<= }
Instance Attribute Summary collapse
-
#type ⇒ Object
readonly
Returns the value of attribute type.
-
#value ⇒ Object
readonly
Returns the value of attribute value.
Instance Method Summary collapse
-
#apply_to(collection) ⇒ Object
Applies filter to a given collection.
-
#initialize(search_params_hash) ⇒ DistanceFilter
constructor
Initialize
DistanceFilter
object from Hash.
Constructor Details
#initialize(search_params_hash) ⇒ DistanceFilter
Initialize DistanceFilter
object from Hash.
Usage
DistanceFilter.new(gt: 5.4)
Supports only one filter as search parameterfor now.
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/starline/entities/distance_filter.rb', line 26 def initialize(search_params_hash) raise_invalid_argument_type_error unless search_params_hash.is_a?(Hash) raise_unknown_filter_error if search_params_hash.empty? raise_ambiguous_filter_error if search_params_hash.size > 1 @type = search_params_hash.keys.first @value = search_params_hash.values.first raise_unknown_filter_error unless supported_filter? raise_invalid_value_error unless valid_value? end |
Instance Attribute Details
#type ⇒ Object (readonly)
Returns the value of attribute type.
17 18 19 |
# File 'lib/starline/entities/distance_filter.rb', line 17 def type @type end |
#value ⇒ Object (readonly)
Returns the value of attribute value.
17 18 19 |
# File 'lib/starline/entities/distance_filter.rb', line 17 def value @value end |
Instance Method Details
#apply_to(collection) ⇒ Object
Applies filter to a given collection.
Usage
filter.apply_to(tracks)
Returns a collection with items which satisfy the current filter
45 46 47 |
# File 'lib/starline/entities/distance_filter.rb', line 45 def apply_to(collection) collection.select { |item| item.distance.send(operator, @value) } end |