module ViewModels class RecipeCriteria SORT_COLUMNS = :created_at, :name, :rating, :total_time attr_writer :sort_column, :sort_direction attr_writer :page, :per def initialize(params = {}) params ||= {} ([:sort_column, :sort_direction, :page, :per]).each do |attr| setter = "#{attr}=" if params[attr] self.send(setter, params[attr]) end end end def sort_column @sort_column ||= SORT_COLUMNS.first @sort_column = @sort_column.to_sym unless SORT_COLUMNS.include? @sort_column @sort_column = SORT_COLUMNS.first end @sort_column end def sort_direction @sort_direction ||= :asc @sort_direction = @sort_direction.to_sym unless [:asc, :desc].include? @sort_direction @sort_direction = :asc end @sort_direction end def page @page.to_i || 1 end def per @per.to_i || 50 end end end