summaryrefslogtreecommitdiff
path: root/web/lib/api/v4/project.rb
diff options
context:
space:
mode:
authorJochen Topf <jochen@topf.org>2014-08-21 14:38:23 +0200
committerJochen Topf <jochen@topf.org>2014-08-21 14:38:23 +0200
commit960a39f5937a50b4d999a3fc5e7465412eb377a0 (patch)
treeafd6af6c77f8f30e862ed80c3f2b3279d577e9f0 /web/lib/api/v4/project.rb
parentcd12010108e17dfab6ebf6f2902663430505bcfe (diff)
downloadtaginfo-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.rb66
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