Conflicts: public/templates/work_packages.list.details.htmlpull/1539/head
commit
6ae4b6dcf4
@ -0,0 +1,21 @@ |
||||
|
||||
angular.module('openproject.api') |
||||
|
||||
.factory('HALAPIResource', ['$q', 'PathHelper', function HALAPIResource($q, PathHelper) { |
||||
'use strict'; |
||||
|
||||
var HALAPIResource = { |
||||
configure: function() { |
||||
Hyperagent.configure('defer', $q.defer); |
||||
}, |
||||
|
||||
setup: function(uri) { |
||||
HALAPIResource.configure(); |
||||
return new Hyperagent.Resource({ |
||||
url: PathHelper.apiPrefixV3 + '/' + uri, |
||||
}); |
||||
} |
||||
} |
||||
|
||||
return HALAPIResource; |
||||
}]); |
@ -0,0 +1,61 @@ |
||||
//-- copyright
|
||||
// OpenProject is a project management system.
|
||||
// Copyright (C) 2012-2014 the OpenProject Foundation (OPF)
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License version 3.
|
||||
//
|
||||
// OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
||||
// Copyright (C) 2006-2013 Jean-Philippe Lang
|
||||
// Copyright (C) 2010-2013 the ChiliProject Team
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; either version 2
|
||||
// of the License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
//
|
||||
// See doc/COPYRIGHT.rdoc for more details.
|
||||
//++
|
||||
|
||||
/*jshint expr: true*/ |
||||
|
||||
describe('HALAPIResource', function() { |
||||
|
||||
var HALAPIResource; |
||||
beforeEach(module('openproject.api', 'openproject.helpers')); |
||||
|
||||
beforeEach(inject(function(_HALAPIResource_){ |
||||
HALAPIResource = _HALAPIResource_; |
||||
})); |
||||
|
||||
describe('setup', function() { |
||||
var workPackageUri = 'work_packages/1'; |
||||
|
||||
beforeEach(inject(function($q) { |
||||
apiResource = { |
||||
fetch: $q.when(function() { return { id: workPackageId }; }) |
||||
} |
||||
})) |
||||
|
||||
beforeEach(inject(function(HALAPIResource) { |
||||
resourceFunction = sinon.stub(Hyperagent, 'Resource').returns(apiResource); |
||||
})); |
||||
|
||||
beforeEach(inject(function() { |
||||
HALAPIResource.setup(workPackageUri); |
||||
})) |
||||
|
||||
it('makes an api setup call', function() { |
||||
expect(resourceFunction).to.have.been.calledWith({ url: "/api/v3/" + workPackageUri }); |
||||
}) |
||||
}); |
||||
}); |
@ -0,0 +1,46 @@ |
||||
#-- encoding: UTF-8 |
||||
#-- copyright |
||||
# OpenProject is a project management system. |
||||
# Copyright (C) 2012-2014 the OpenProject Foundation (OPF) |
||||
# |
||||
# This program is free software; you can redistribute it and/or |
||||
# modify it under the terms of the GNU General Public License version 3. |
||||
# |
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang |
||||
# Copyright (C) 2010-2013 the ChiliProject Team |
||||
# |
||||
# This program is free software; you can redistribute it and/or |
||||
# modify it under the terms of the GNU General Public License |
||||
# as published by the Free Software Foundation; either version 2 |
||||
# of the License, or (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program; if not, write to the Free Software |
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||
# |
||||
# See doc/COPYRIGHT.rdoc for more details. |
||||
#++ |
||||
|
||||
require 'reform' |
||||
require 'reform/form/coercion' |
||||
|
||||
module API |
||||
module V3 |
||||
module Activities |
||||
class ActivityModel < Reform::Form |
||||
include Composition |
||||
include Coercion |
||||
|
||||
model :journal |
||||
|
||||
property :user_id, on: :journal, type: Integer |
||||
end |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,91 @@ |
||||
#-- encoding: UTF-8 |
||||
#-- copyright |
||||
# OpenProject is a project management system. |
||||
# Copyright (C) 2012-2014 the OpenProject Foundation (OPF) |
||||
# |
||||
# This program is free software; you can redistribute it and/or |
||||
# modify it under the terms of the GNU General Public License version 3. |
||||
# |
||||
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows: |
||||
# Copyright (C) 2006-2013 Jean-Philippe Lang |
||||
# Copyright (C) 2010-2013 the ChiliProject Team |
||||
# |
||||
# This program is free software; you can redistribute it and/or |
||||
# modify it under the terms of the GNU General Public License |
||||
# as published by the Free Software Foundation; either version 2 |
||||
# of the License, or (at your option) any later version. |
||||
# |
||||
# This program is distributed in the hope that it will be useful, |
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
# GNU General Public License for more details. |
||||
# |
||||
# You should have received a copy of the GNU General Public License |
||||
# along with this program; if not, write to the Free Software |
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
||||
# |
||||
# See doc/COPYRIGHT.rdoc for more details. |
||||
#++ |
||||
|
||||
require 'roar/decorator' |
||||
require 'roar/representer/json/hal' |
||||
|
||||
module API |
||||
module V3 |
||||
module Activities |
||||
class ActivityRepresenter < Roar::Decorator |
||||
include Roar::Representer::JSON::HAL |
||||
include Roar::Representer::Feature::Hypermedia |
||||
include Rails.application.routes.url_helpers |
||||
|
||||
self.as_strategy = API::Utilities::CamelCasingStrategy.new |
||||
|
||||
property :_type, exec_context: :decorator |
||||
|
||||
link :self do |
||||
{ href: "#{root_url}/api/v3/activities/#{represented.journal.id}", title: "#{represented.journal.id}" } |
||||
end |
||||
|
||||
link :work_package do |
||||
{ href: "#{root_url}/api/v3/work_packages/#{represented.journal.journable.id}", title: "#{represented.journal.journable.subject}" } |
||||
end |
||||
|
||||
link :user do |
||||
{ href: "#{root_url}/api/v3/users/#{represented.journal.user.id}", title: "#{represented.journal.user.name} - #{represented.journal.user.login}" } |
||||
end |
||||
|
||||
property :id, getter: -> (*) { journal.id }, render_nil: true |
||||
property :user_id, render_nil: true |
||||
property :user_name, getter: -> (*) { journal.user.try(:name) }, render_nil: true |
||||
property :user_login, getter: -> (*) { journal.user.try(:login) }, render_nil: true |
||||
property :user_mail, getter: -> (*) { journal.user.try(:mail) }, render_nil: true |
||||
property :messages, exec_context: :decorator, render_nil: true |
||||
property :version, getter: -> (*) { journal.version }, render_nil: true |
||||
property :created_at, getter: -> (*) { journal.created_at.utc.iso8601 }, render_nil: true |
||||
|
||||
def _type |
||||
if represented.journal.notes.blank? |
||||
'Activity' |
||||
else |
||||
'Activity::Comment' |
||||
end |
||||
end |
||||
|
||||
def messages |
||||
journal = represented.journal |
||||
if journal.notes.blank? |
||||
journal.details.map{ |d| journal.render_detail(d, no_html: true) } |
||||
else |
||||
[journal.notes] |
||||
end |
||||
end |
||||
|
||||
private |
||||
|
||||
def default_url_options |
||||
ActionController::Base.default_url_options |
||||
end |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue