Return GeoJSON for notes when JSON format is requested
authorTom Hughes <tom@compton.nu>
Sun, 18 Sep 2011 17:54:39 +0000 (18:54 +0100)
committerTom Hughes <tom@compton.nu>
Sun, 18 Sep 2011 17:54:39 +0000 (18:54 +0100)
app/controllers/note_controller.rb
app/models/note.rb
app/views/note/_note.json.erb [new file with mode: 0644]
app/views/note/_note_comment.json.erb [new file with mode: 0644]
app/views/note/_note_spacer.json.erb [new file with mode: 0644]
app/views/note/list.json.erb [new file with mode: 0644]

index c461450451375d217e8652f0839e9506e119b39f..6d428d822d5f4c0322726007d3c757e173cad0a2 100644 (file)
@@ -52,7 +52,7 @@ class NoteController < ApplicationController
       format.rss
       format.js
       format.xml
-      format.json { render :json => @notes.to_json }
+      format.json
       format.gpx
     end
   end
@@ -200,7 +200,7 @@ class NoteController < ApplicationController
     respond_to do |format|
       format.xml
       format.rss
-      format.json { render :json => @note.to_json }
+      format.json
       format.gpx
     end
   end
@@ -256,7 +256,7 @@ class NoteController < ApplicationController
       format.rss { render :action => :list }
       format.js
       format.xml { render :action => :list }
-      format.json { render :json => @notes.to_json }
+      format.json { render :action => :list }
       format.gpx { render :action => :list }
     end
   end
index 892ada1aa8a5163d474bbde166ca4b9251f4d1fa..a2937074c4053d8b4eaaca9a051fb4b67508d0e4 100644 (file)
@@ -72,17 +72,4 @@ class Note < ActiveRecord::Base
   def author_name
     self.comments.first.author_name
   end
-
-  # Custom JSON output routine for notes
-  def to_json(options = {})
-    super options.reverse_merge(
-      :methods => [ :lat, :lon ], 
-      :only => [ :id, :status, :created_at ],
-      :include => {
-         :comments => {
-           :only => [ :event, :author_name, :created_at, :body ]
-         }
-      }
-    )
-  end
 end
diff --git a/app/views/note/_note.json.erb b/app/views/note/_note.json.erb
new file mode 100644 (file)
index 0000000..0d101f0
--- /dev/null
@@ -0,0 +1,19 @@
+{
+  "type": "Feature",
+  "geometry": {
+    "type": "Point",
+    "coordinates": [ <%= note.lon %>, <%= note.lat %> ]
+  },
+  "properties": {
+    "id": <%= note.id %>,
+    "date_created": "<%= note.created_at %>",
+    "nearby": "<%= note.nearby_place %>",
+    "status": "<%= note.status %>",
+<% if note.status == "closed" -%>
+    "closed_at": "<%= note.closed_at %>",
+<% end -%>
+    "comments": [
+      <%= render :partial => "note_comment", :collection => note.comments, :spacer_template => "note_spacer" -%>
+    ]
+  }
+}
diff --git a/app/views/note/_note_comment.json.erb b/app/views/note/_note_comment.json.erb
new file mode 100644 (file)
index 0000000..405a87d
--- /dev/null
@@ -0,0 +1,8 @@
+{
+  "date": "<%= note_comment.created_at %>",
+<% unless note_comment.author_id.nil? -%>
+  "uid": <%= note_comment.author_id %>,
+<% end -%>
+  "user": "<%= note_comment.author_name %>",
+  "text": "<%= note_comment.body %>"
+}
diff --git a/app/views/note/_note_spacer.json.erb b/app/views/note/_note_spacer.json.erb
new file mode 100644 (file)
index 0000000..7edb2fa
--- /dev/null
@@ -0,0 +1 @@
+,
diff --git a/app/views/note/list.json.erb b/app/views/note/list.json.erb
new file mode 100644 (file)
index 0000000..4884478
--- /dev/null
@@ -0,0 +1,6 @@
+{
+  "type": "FeatureCollection",
+  "features": [
+    <%= render :partial => "note", :collection => @notes, :spacer_template=> "note_spacer" -%>
+  ]
+}