parsley/app/models/view_models/recipe_criteria.rb

48 lines
996 B
Ruby
Raw Normal View History

2016-09-28 17:08:43 -05:00
module ViewModels
class RecipeCriteria
SORT_COLUMNS = :created_at, :name, :rating, :total_time
PARAMS = [:sort_column, :sort_direction, :page, :per, :name, :tags]
2016-09-28 17:08:43 -05:00
attr_accessor *PARAMS
2016-09-28 17:08:43 -05:00
def initialize(params = nil)
2016-09-28 17:08:43 -05:00
params ||= {}
PARAMS.each do |attr|
2016-09-28 17:08:43 -05:00
setter = "#{attr}="
2018-04-01 21:43:23 -05:00
if params[attr].present?
2016-09-28 17:08:43 -05:00
self.send(setter, params[attr])
end
end
2018-07-15 17:00:25 -05:00
puts self.inspect
2016-09-28 17:08:43 -05:00
end
def sort_column
default(@sort_column.to_s.to_sym, SORT_COLUMNS.first, ->(v) {SORT_COLUMNS.include?(v)} )
2016-09-28 17:08:43 -05:00
end
def sort_direction
default(@sort_direction.to_s.to_sym, :desc, ->(v) {[:asc, :desc].include?(v)} )
2016-09-28 17:08:43 -05:00
end
def page
default(@page, 1, ->(v) { v.to_i > 0 })
2016-09-28 17:08:43 -05:00
end
def per
default(@per, 50, ->(v) { v.to_i > 0 })
end
protected
def default(val, default_val, valid_proc)
if val.blank? || !valid_proc.call(val)
default_val
else
val
end
2016-09-28 17:08:43 -05:00
end
end
end