diff options
author | Jochen Topf <jochen@topf.org> | 2014-08-21 14:38:23 +0200 |
---|---|---|
committer | Jochen Topf <jochen@topf.org> | 2014-08-21 14:38:23 +0200 |
commit | 960a39f5937a50b4d999a3fc5e7465412eb377a0 (patch) | |
tree | afd6af6c77f8f30e862ed80c3f2b3279d577e9f0 /web/lib/api/v4/project.rb | |
parent | cd12010108e17dfab6ebf6f2902663430505bcfe (diff) | |
download | taginfo-960a39f5937a50b4d999a3fc5e7465412eb377a0.tar taginfo-960a39f5937a50b4d999a3fc5e7465412eb377a0.tar.gz |
Add new 'projects' source.
Any kind of project using OSM tags can create a json-formatted taginfo project
file and after its URL is added to the taginfo config, taginfo will integrate
this data into its database.
Diffstat (limited to 'web/lib/api/v4/project.rb')
-rw-r--r-- | web/lib/api/v4/project.rb | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/web/lib/api/v4/project.rb b/web/lib/api/v4/project.rb new file mode 100644 index 0000000..94eeadc --- /dev/null +++ b/web/lib/api/v4/project.rb @@ -0,0 +1,66 @@ +# web/lib/api/v4/project.rb +class Taginfo < Sinatra::Base + + api(4, 'project/tags', { + :description => 'Get list of all keys/tags used by a project.', + :parameters => { :project => 'Project ID' }, + :paging => :optional, + :sort => %w( tag ), + :result => paging_results([ + [:key, :STRING, 'Key'], + [:value, :STRING, 'Value'], + [:description, :STRING, 'Description'], + [:doc_url, :STRING, 'Documentation URL'], + [:icon_url, :STRING, 'Icon URL'] + ]), + :example => { :page => 1, :rp => 10, :sortname => 'key', :sortorder => 'asc' }, + :ui => '/projects/id_editor' + }) do + project_id = params[:project] + + q = like_contains(params[:query]) + total = @db.count('projects.project_tags'). + condition("project_id=?", project_id). + condition_if("key LIKE ? ESCAPE '@' OR value LIKE ? ESCAPE '@'", q, q). + get_first_value().to_i + + res = @db.select('SELECT * FROM projects.project_tags'). + condition("project_id=?", project_id). + condition_if("key LIKE ? ESCAPE '@' OR value LIKE ? ESCAPE '@'", q, q). + order_by(@ap.sortname, @ap.sortorder) { |o| + o.tag :key + o.tag :value + }. + paging(@ap). + execute() + + return JSON.generate({ + :page => @ap.page, + :rp => @ap.results_per_page, + :total => total, + :url => request.url, + :data => res.map{ |row| { + :key => row['key'], + :value => row['value'], + :description => row['description'], + :doc_url => row['doc_url'], + :icon_url => row['icon_url'] + }} + }, json_opts(params[:format])) + end + + api(4, 'project/icon', { + :description => 'Access logo icon for project.', + :parameters => { :project => 'Project ID' }, + :result => 'PNG image.', + :example => { :project => 'osmcoastline' }, + :ui => '/projects' + }) do + project_id = params[:project] + content_type :png + @db.select('SELECT icon FROM projects.projects'). + condition('id = ?', project_id). + get_first_value() + end + +end |