Showing with 47 additions and 6 deletions.
  1. +3 −3 CHANGELOG
  2. +17 −2 doc/api/notes.md
  3. +1 −1 lib/api/entities.rb
  4. +18 −0 lib/api/notes.rb
  5. +8 −0 spec/requests/api/notes_spec.rb
6 changes: 3 additions & 3 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
v 3.2.0
- [API] create notes for snippets and issues
- [API] list notes for snippets and issues
- [API] list project wall notes
- [API] list, create issue notes
- [API] list, create snippet notes
- [API] list, create wall notes
- Remove project code - use path instead
- added username field to user
- rake task to fill usernames based on emails create namespaces for users
Expand Down
19 changes: 17 additions & 2 deletions doc/api/notes.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ GET /projects/:id/notes
"blocked": false,
"created_at": "2012-05-23T08:00:58Z"
},
"updated_at":"2012-11-27T19:16:44Z",
"created_at":"2012-11-27T19:16:44Z"
"created_at": "2012-11-27T19:16:44Z"
}
]
```
Expand Down Expand Up @@ -88,6 +87,22 @@ Parameters:

## New note

### New wall note

Create a new wall note.

```
POST /projects/:id/notes
```

Parameters:

+ `id` (required) - The ID or code name of a project
+ `body` (required) - The content of a note

Will return created note with status `201 Created` on success, or `404 Not found` on fail.


### New issue note

Create a new issue note.
Expand Down
2 changes: 1 addition & 1 deletion lib/api/entities.rb
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class Note < Grape::Entity
expose :id
expose :note, as: :body
expose :author, using: Entities::UserBasic
expose :updated_at, :created_at
expose :created_at
end

class MRNote < Grape::Entity
Expand Down
18 changes: 18 additions & 0 deletions lib/api/notes.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,24 @@ class Notes < Grape::API
present paginate(@notes), with: Entities::Note
end

# Create a new project wall note
#
# Parameters:
# id (required) - The ID or code name of a project
# body (required) - The content of a note
# Example Request:
# POST /projects/:id/notes
post ":id/notes" do
@note = user_project.notes.new(note: params[:body])
@note.author = current_user

if @note.save
present @note, with: Entities::Note
else
not_found!
end
end

NOTEABLE_TYPES.each do |noteable_type|
noteables_str = noteable_type.to_s.underscore.pluralize
noteable_id_str = "#{noteable_type.to_s.underscore}_id"
Expand Down
8 changes: 8 additions & 0 deletions spec/requests/api/notes_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@
end
end

describe "POST /projects/:id/notes" do
it "should create a new wall note" do
post api("/projects/#{project.id}/notes", user), body: 'hi!'
response.status.should == 201
json_response['body'].should == 'hi!'
end
end

describe "GET /projects/:id/noteable/:noteable_id/notes" do
context "when noteable is an Issue" do
it "should return an array of issue notes" do
Expand Down