summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacob Schatz <jacobschatz@Jacobs-MBP.fios-router.home>2016-02-24 20:06:47 -0500
committerJacob Schatz <jacobschatz@Jacobs-MBP.fios-router.home>2016-02-24 20:06:47 -0500
commit6e22ce275c6e1693ce3e7249e6c3adb3bb11654a (patch)
tree360ead1f86739059c017d4f83818cf8be53e4124
parentaf6c7cfd069a81aca9a0f07fe8b98f27956c9dc6 (diff)
downloadgitlab-ce-6e22ce275c6e1693ce3e7249e6c3adb3bb11654a.tar.gz
Add serializers to create custom JSON data.
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock3
-rw-r--r--app/assets/javascripts/Todos.js.coffee37
-rw-r--r--app/controllers/dashboard/todos_controller.rb6
-rw-r--r--app/helpers/page_layout_helper.rb2
-rw-r--r--app/serializers/project_serializer.rb5
-rw-r--r--app/serializers/todo_serializer.rb5
-rw-r--r--app/views/dashboard/todos/_todo.html.haml2
-rw-r--r--app/views/layouts/_page.html.haml2
-rw-r--r--app/views/layouts/header/_default.html.haml2
10 files changed, 60 insertions, 5 deletions
diff --git a/Gemfile b/Gemfile
index 41abb17f050..64aabd36e21 100644
--- a/Gemfile
+++ b/Gemfile
@@ -67,6 +67,7 @@ gem "github-linguist", "~> 4.7.0", require: "linguist"
gem 'grape', '~> 0.13.0'
gem 'grape-entity', '~> 0.4.2'
gem 'rack-cors', '~> 0.4.0', require: 'rack/cors'
+gem 'active_model_serializers', '~> 0.9.4'
# Pagination
gem "kaminari", "~> 0.16.3"
diff --git a/Gemfile.lock b/Gemfile.lock
index e2e290b3dc2..14d727b95e3 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -23,6 +23,8 @@ GEM
erubis (~> 2.7.0)
rails-dom-testing (~> 1.0, >= 1.0.5)
rails-html-sanitizer (~> 1.0, >= 1.0.2)
+ active_model_serializers (0.9.4)
+ activemodel (>= 3.2)
activejob (4.2.5.1)
activesupport (= 4.2.5.1)
globalid (>= 0.3.0)
@@ -876,6 +878,7 @@ PLATFORMS
DEPENDENCIES
RedCloth (~> 4.2.9)
ace-rails-ap (~> 2.0.1)
+ active_model_serializers (~> 0.9.4)
activerecord-deprecated_finders (~> 1.0.3)
activerecord-session_store (~> 0.1.0)
acts-as-taggable-on (~> 3.4)
diff --git a/app/assets/javascripts/Todos.js.coffee b/app/assets/javascripts/Todos.js.coffee
index 5c75fa5e43a..6c5c323545b 100644
--- a/app/assets/javascripts/Todos.js.coffee
+++ b/app/assets/javascripts/Todos.js.coffee
@@ -1,5 +1,38 @@
class @Todos
constructor: ->
+ @service = new TodosService()
+ @service.getTodos()
new Vue(
-
- ) \ No newline at end of file
+ el: '#todos'
+ data:{}
+ methods:
+ doneClicked: (e) ->
+ e.preventDefault()
+ e.stopImmediatePropagation()
+ console.log('done clicked');
+ )
+
+class @TodosService
+ constructor: ->
+ console.log('todos service')
+
+ deleteTodo: () ->
+ $.ajax
+ type: 'POST'
+ url: doneURL
+ dataType: 'json'
+ data: '_method': 'delete'
+ error: (data, textStatus, jqXHR) ->
+ new Flash('Unable to update your todos.', 'alert')
+ _this.clearDone($this.closest('li'))
+ return
+
+ success: (data, textStatus, jqXHR) ->
+ new Flash(data.notice, 'success')
+ _this.clearDone($this.closest('li'))
+ return
+
+ getTodos: () ->
+ $.getJSON '/dashboard/todos', (data) ->
+ console.log 'data', data
+ return \ No newline at end of file
diff --git a/app/controllers/dashboard/todos_controller.rb b/app/controllers/dashboard/todos_controller.rb
index 43cf8fa71af..7e67819116b 100644
--- a/app/controllers/dashboard/todos_controller.rb
+++ b/app/controllers/dashboard/todos_controller.rb
@@ -3,6 +3,12 @@ class Dashboard::TodosController < Dashboard::ApplicationController
def index
@todos = @todos.page(params[:page]).per(PER_PAGE)
+ respond_to do |format|
+ format.html
+ format.json do
+ render json: @todos.group_by(&:project)
+ end
+ end
end
def destroy
diff --git a/app/helpers/page_layout_helper.rb b/app/helpers/page_layout_helper.rb
index 54083b64d9b..decde78406d 100644
--- a/app/helpers/page_layout_helper.rb
+++ b/app/helpers/page_layout_helper.rb
@@ -37,6 +37,8 @@ module PageLayoutHelper
def container_id(title=nil)
if title
@container_id = title
+ else
+ @container_id
end
end
diff --git a/app/serializers/project_serializer.rb b/app/serializers/project_serializer.rb
new file mode 100644
index 00000000000..5c0e53f41b6
--- /dev/null
+++ b/app/serializers/project_serializer.rb
@@ -0,0 +1,5 @@
+class ProjectSerializer < ActiveModel::Serializer
+ attributes :id, :name
+
+ has_many :todos
+end \ No newline at end of file
diff --git a/app/serializers/todo_serializer.rb b/app/serializers/todo_serializer.rb
new file mode 100644
index 00000000000..a9f97e8a009
--- /dev/null
+++ b/app/serializers/todo_serializer.rb
@@ -0,0 +1,5 @@
+class TodoSerializer < ActiveModel::Serializer
+ attributes :id, :project, :note
+
+ has_one :project
+end \ No newline at end of file
diff --git a/app/views/dashboard/todos/_todo.html.haml b/app/views/dashboard/todos/_todo.html.haml
index 6975f6ed0db..3f7025f938e 100644
--- a/app/views/dashboard/todos/_todo.html.haml
+++ b/app/views/dashboard/todos/_todo.html.haml
@@ -13,7 +13,7 @@
- if todo.pending?
.todo-actions.pull-right
- = link_to 'Done', [:dashboard, todo], method: :delete, class: 'btn'
+ = link_to 'Done', [:dashboard, todo], method: :delete, class: 'btn', '@click' => 'doneClicked($event)'
.todo-body
.todo-note
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index e53d5b07801..0c209a8aeba 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -1,4 +1,4 @@
-.page-with-sidebar{ class: "#{page_sidebar_class} #{page_gutter_class}" }
+.page-with-sidebar{ class: "#{page_sidebar_class} #{page_gutter_class}", id: container_id }
= render "layouts/broadcast"
.sidebar-wrapper.nicescroll{ class: nav_sidebar_class }
.header-logo
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index 580ecbb2599..1520d004b65 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -1,5 +1,5 @@
%header.navbar.navbar-fixed-top.navbar-gitlab{ class: nav_header_class }
- %div{ class: "container-fluid #{container_id}" }
+ %div.container-fluid
.header-content
%button.navbar-toggle{type: 'button'}
%span.sr-only Toggle navigation