]> git.openstreetmap.org Git - rails.git/blob - app/controllers/concerns/query_methods.rb
2656eb4af4c22ffc96451fc484c427c898a99584
[rails.git] / app / controllers / concerns / query_methods.rb
1 module QueryMethods
2   extend ActiveSupport::Concern
3
4   private
5
6   ##
7   # Limit the result according to request parameters and settings
8   def query_limit(items)
9     items.limit(query_limit_value)
10   end
11
12   ##
13   # Get query limit value from request parameters and settings
14   def query_limit_value
15     name = controller_path.sub(%r{^api/}, "").tr("/", "_").singularize
16     max_limit = Settings["max_#{name}_query_limit"]
17     default_limit = Settings["default_#{name}_query_limit"]
18     if params[:limit]
19       if params[:limit].to_i.positive? && params[:limit].to_i <= max_limit
20         params[:limit].to_i
21       else
22         raise OSM::APIBadUserInput, "#{controller_name.classify} limit must be between 1 and #{max_limit}"
23       end
24     else
25       default_limit
26     end
27   end
28 end