From: Xin Zheng Date: Wed, 23 Jan 2008 16:43:30 +0000 (+0000) Subject: added application.yml, refactored map method X-Git-Tag: live~7906 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/6de965520beaf74a9f9377a29c74310e4e3732f7?hp=ea132b001d222a6e2781f51357982934de1f58ae added application.yml, refactored map method --- diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb index 28d0f413b..f4584b8b4 100644 --- a/app/controllers/api_controller.rb +++ b/app/controllers/api_controller.rb @@ -4,15 +4,18 @@ class ApiController < ApplicationController before_filter :check_read_availability, :except => [:capabilities] after_filter :compress_output + # Help methods for checking boundary sanity and area size + include MapBoundary + #COUNT is the number of map requests to allow before exiting and starting a new process @@count = COUNT # The maximum area you're allowed to request, in square degrees MAX_REQUEST_AREA = 0.25 - # Number of GPS trace/trackpoints returned per-page TRACEPOINTS_PER_PAGE = 5000 + def trackpoints @@count+=1 @@ -103,46 +106,31 @@ class ApiController < ApplicationController # Figure out the bbox bbox = params['bbox'] + unless bbox and bbox.count(',') == 3 + # alternatively: report_error(TEXT['boundary_parameter_required'] report_error("The parameter bbox is required, and must be of the form min_lon,min_lat,max_lon,max_lat") return end bbox = bbox.split(',') - min_lon = bbox[0].to_f - min_lat = bbox[1].to_f - max_lon = bbox[2].to_f - max_lat = bbox[3].to_f - - # check the bbox is sane - unless min_lon <= max_lon - report_error("The minimum longitude must be less than the maximum longitude, but it wasn't") - return - end - unless min_lat <= max_lat - report_error("The minimum latitude must be less than the maximum latitude, but it wasn't") - return - end - unless min_lon >= -180 && min_lat >= -90 && max_lon <= 180 && max_lat <= 90 - report_error("The latitudes must be between -90 and 90, and longitudes between -180 and 180") - return - end + min_lon, min_lat, max_lon, max_lat = *bbox.map{|b| b.to_f } - # check the bbox isn't too large - requested_area = (max_lat-min_lat)*(max_lon-min_lon) - if requested_area > MAX_REQUEST_AREA - report_error("The maximum bbox size is " + MAX_REQUEST_AREA.to_s + - ", and your request was too large. Either request a smaller area, or use planet.osm") + # check boundary is sane and area within defined + # see /config/application.yml + begin + check_boundaries(min_lon, min_lat, max_lon, max_lat) + rescue Exception => err + report_error(err.message) return end # get all the nodes - nodes = Node.find_by_area(min_lat, min_lon, max_lat, max_lon, :conditions => "visible = 1") + nodes = Node.find_by_area(min_lat, min_lon, max_lat, max_lon, :conditions => "visible = 1", :limit => APP_CONFIG['max_number_of_nodes']+1) node_ids = nodes.collect {|node| node.id } - - if node_ids.length > 50_000 + if node_ids.length > APP_CONFIG['max_number_of_nodes'] report_error("You requested too many nodes (limit is 50,000). Either request a smaller area, or use planet.osm") return end diff --git a/config/application.yml b/config/application.yml new file mode 100644 index 000000000..85ebe9f21 --- /dev/null +++ b/config/application.yml @@ -0,0 +1,16 @@ +standard_settings: &standard_settings + # The maximum area you're allowed to request, in square degrees + max_request_area: 0.25 + # Number of GPS trace/trackpoints returned per-page + tracepoints_per_page: 5000 + # Maximum number of nodes + max_number_of_nodes: 50000 + +development: + <<: *standard_settings + +production: + <<: *standard_settings + +test: + <<: *standard_settings diff --git a/config/initializers/load_configs.rb b/config/initializers/load_configs.rb new file mode 100644 index 000000000..3f610cbec --- /dev/null +++ b/config/initializers/load_configs.rb @@ -0,0 +1,10 @@ +# This file loads various yml configuration files + +# Load application config +APP_CONFIG = YAML.load(File.read(RAILS_ROOT + "/config/application.yml"))[RAILS_ENV] +# This will let you more easily use helpers based on url_for in your mailers. +ActionMailer::Base.default_url_options[:host] = APP_CONFIG['host'] + +# Load texts in a particular language +TEXT = YAML.load(File.read(RAILS_ROOT + "/config/text_outputs/en.yml")) + diff --git a/config/text_outputs/en.yml b/config/text_outputs/en.yml new file mode 100644 index 000000000..cb3ab99e4 --- /dev/null +++ b/config/text_outputs/en.yml @@ -0,0 +1,3 @@ +boundary_parameter_required: "The parameter bbox is required, and must be of the form min_lon,min_lat,max_lon,max_lat" + + diff --git a/script/yaml_to_spec b/script/yaml_to_spec new file mode 100755 index 000000000..4577d9181 --- /dev/null +++ b/script/yaml_to_spec @@ -0,0 +1,21 @@ +#!/usr/bin/env ruby +require "yaml" + +buffer = [] +STDIN.each_line { |l| buffer << l } + +contexts = YAML::load(buffer.join("\n")) + +contexts.each do |context,specifications| + puts "" + puts "context \"#{context}\" do" + puts "" + specifications.each do |specification| + puts " specify \"#{specification}\" do" + puts " violated \"no assertions performed\"" + puts " end" + puts "" + end + puts "end" +end + diff --git a/spec/controllers/api_controller_spec.rb b/spec/controllers/api_controller_spec.rb index 99f41c2a0..ad9b7af98 100644 --- a/spec/controllers/api_controller_spec.rb +++ b/spec/controllers/api_controller_spec.rb @@ -10,7 +10,7 @@ module ApiMapHelpers when :valid '-0.3565352711206896,51.464740877658045,-0.2686446461206896,51.508686190158045' when :min_lat_more_than_max_lat - '-0.3565352711206896,-0.2686446461206896,51.508686190158045,51.464740877658045' + '-0.3565352711206896,51.508686190158045,-0.2686446461206896,51.464740877658045' when :min_lon_more_than_max_lon '51.464740877658045,-0.2686446461206896,51.508686190158045,-0.3565352711206896' end