Guest User

Untitled

a guest
Feb 21st, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. # Kind of messy, but idea is to be able to sanely retrive params
  2. # with a default, this could be expanded to multi-level params too
  3. # although I think that, in general, those would require more special-cases.
  4. # Note: +default+ will be converted to a string; it should be symmetrical
  5. # with the conversion method
  6. #
  7. # While this is extremely helpful for things such as seach forms it
  8. # seems much less useful dealing with crud operations when Models
  9. # or AR operations based on an id are used as these are already
  10. # appropriately handle conversions.
  11. #
  12. class SelectParams
  13. def initialize(source)
  14. @source = source
  15. @used = HashWithIndifferentAccess.new
  16. end
  17. def get(name, default='', conversion=nil)
  18. @used[name] = true
  19. raw_value = @source[name]
  20. value = raw_value.nil? || raw_value.empty? ? default.to_s : raw_value
  21. conversion ? value.send(conversion) : value
  22. end
  23. # Delete params which have not been retrieved with #get. Useful if the params
  24. # are going to be directly passed (such as a paginators "next page" link)
  25. def delete_unused!
  26. @source.delete_if {|k, v| not @used.include? k}
  27. end
  28. def delete(*names)
  29. names.each {|name| @source.delete name}
  30. end
  31. end
  32.  
  33. def select_params(source=params)
  34. p = SelectParams.new(source)
  35. yield p
  36. p
  37. end
  38.  
  39.  
  40. select_params do |p|
  41. @advanced = p.get :advanced, false, :to_bool
  42. @search = p.get :search
  43. if @advanced
  44. @min_length = p.get :min_length, 0, :to_i
  45. @max_length = p.get :max_length, 0, :to_i
  46. @offensive = p.get :include_offensive, false, :to_bool
  47. @random = p.get :random, false, :to_bool
  48. @per_page = p.get :per_page, 10, :to_i
  49. else
  50. @per_page = 10
  51. end
  52. @page = p.get :page, 1, :to_i
  53. p.delete :commit
  54. p.delete_unused!
  55. end
Add Comment
Please, Sign In to add comment