Class: Might::SortParametersExtractor

Inherits:
Object
  • Object
show all
Defined in:
lib/might/sort_parameters_extractor.rb

Overview

User provided sorting syntax:

* `name` - sort by name
* `-name` - sort by name in reversed order
* `-name,created_at` - sort by name in reversed order, and then sort by created_at

This middleware parses sorting string and builds Parameter array If user passes not defined sort order, it yields to ‘UndefinedParameter`, so you may validate it.

See Also:

  • Might::Sort::Parameter

Instance Method Summary collapse

Constructor Details

#initialize(app, parameters_definition) ⇒ SortParametersExtractor

Returns a new instance of SortParametersExtractor.

Parameters:



17
18
19
20
# File 'lib/might/sort_parameters_extractor.rb', line 17

def initialize(app, parameters_definition)
  @app = app
  @parameters_definition = parameters_definition
end

Instance Method Details

#call(env) ⇒ <<Might::RansackableSort::SortParameter, []>]

Returns <<Might::RansackableSort::SortParameter, []>].

Parameters:

  • env (<String, []>)
    • first element is a scope to be sorted

    • second is a String with user provided sortings

Returns:

  • (<<Might::RansackableSort::SortParameter, []>])

    <<Might::RansackableSort::SortParameter, []>]



27
28
29
30
31
32
33
34
35
# File 'lib/might/sort_parameters_extractor.rb', line 27

def call(env)
  params, errors = env

  sort_params = sort_order(params[:sort]).map do |(attribute, direction)|
    extract_parameter(attribute, direction)
  end

  app.call([params.merge(sort: sort_params), errors])
end