Commit 74b5caef authored by Stany MARCEL's avatar Stany MARCEL

Add wikis api

Implements all methods of the Wikis API Introduced in GitLab 10.0.

https://docs.gitlab.com/ce/api/wikis.htmlSigned-off-by: 's avatarStany MARCEL <stanypub@gmail.com>
parent d11d546f
...@@ -37,6 +37,7 @@ includes all calls to the following services: ...@@ -37,6 +37,7 @@ includes all calls to the following services:
- [x] Settings - [x] Settings
- [x] Pipelines - [x] Pipelines
- [x] Version - [x] Version
- [x] Wikis
## Usage ## Usage
......
...@@ -190,6 +190,7 @@ type Client struct { ...@@ -190,6 +190,7 @@ type Client struct {
Todos *TodosService Todos *TodosService
Users *UsersService Users *UsersService
Version *VersionService Version *VersionService
Wikis *WikisService
} }
// ListOptions specifies the optional parameters to various List methods that // ListOptions specifies the optional parameters to various List methods that
...@@ -260,6 +261,7 @@ func newClient(httpClient *http.Client, tokenType tokenType, token string) *Clie ...@@ -260,6 +261,7 @@ func newClient(httpClient *http.Client, tokenType tokenType, token string) *Clie
c.Todos = &TodosService{client: c} c.Todos = &TodosService{client: c}
c.Users = &UsersService{client: c} c.Users = &UsersService{client: c}
c.Version = &VersionService{client: c} c.Version = &VersionService{client: c}
c.Wikis = &WikisService{client: c}
return c return c
} }
......
// Copyright 2017, Stany MARCEL
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package gitlab
import (
"fmt"
"net/url"
)
// WikisService handles communication with the wikis related methods of
// the Gitlab API Introduced in GitLab 10.0.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html
type WikisService struct {
client *Client
}
// WikiFormat represents the available formats that can be used for a wiki page
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html
type WikiFormat string
// The available todo actions.
const (
WikiFormatMarkdown WikiFormat = "markdown"
WikiFormatRFoc WikiFormat = "rdoc"
WikiFormatASCIIDoc WikiFormat = "asciidoc"
)
// Wiki represents a GitLab wiki.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html
type Wiki struct {
Content string `json:"content"`
Format WikiFormat `json:"format"`
Slug string `json:"slug"`
Title string `json:"title"`
}
func (t Wiki) String() string {
return Stringify(t)
}
// ListWikisOptions represents the available ListWikis() options.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#get-a-list-of-wikis
type ListWikisOptions struct {
WithContent *bool `url:"with_content,omitempty" json:"with_content,omitempty"`
}
// ListWikis lists all pages of the wiki of the given project id.
// When with_content is set, it returns also the content of the pages.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#list-wiki-pages
func (s *WikisService) ListWikis(pid interface{}, opt *ListWikisOptions, options ...OptionFunc) ([]*Wiki, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("projects/%s/wikis", url.QueryEscape(project))
req, err := s.client.NewRequest("GET", u, opt, options)
if err != nil {
return nil, nil, err
}
var t []*Wiki
resp, err := s.client.Do(req, &t)
if err != nil {
return nil, resp, err
}
return t, resp, err
}
// GetWikiPage gets a wiki page for a given project.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#get-a-wiki-page
func (s *WikisService) GetWikiPage(pid interface{}, slug string, options ...OptionFunc) (*Wiki, *Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("projects/%s/wikis/%s", url.QueryEscape(project), url.QueryEscape(slug))
req, err := s.client.NewRequest("GET", u, nil, options)
if err != nil {
return nil, nil, err
}
var t *Wiki
resp, err := s.client.Do(req, &t)
if err != nil {
return nil, resp, err
}
return t, resp, err
}
// CreateNewWikiPageOptions represents options to CreateNewWikiPage
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#create-a-new-wiki-page
type CreateNewWikiPageOptions struct {
Content *string `url:"content" json:"content"`
Title *string `url:"title" json:"title"`
Format *string `url:"format,omitempty" json:"format,omitempty"`
}
// CreateNewWikiPage creates a new wiki page for the given repository with the given title, slug, and content..
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#create-a-new-wiki-page
func (s *WikisService) CreateNewWikiPage(pid interface{}, opt *CreateNewWikiPageOptions, options ...OptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/wikis", url.QueryEscape(project))
req, err := s.client.NewRequest("POST", u, opt, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// EditWikiPageOptions represents options to EditWikiPage
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#edit-an-existing-wiki-page
type EditWikiPageOptions struct {
Content *string `url:"content" json:"content"`
Title *string `url:"title" json:"title"`
Format *string `url:"format,omitempty" json:"format,omitempty"`
}
// EditWikiPage Updates an existing wiki page. At least one parameter is required to update the wiki page.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#edit-an-existing-wiki-page
func (s *WikisService) EditWikiPage(pid interface{}, slug string, opt *EditWikiPageOptions, options ...OptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/wikis/%s", url.QueryEscape(project), url.QueryEscape(slug))
req, err := s.client.NewRequest("PUT", u, opt, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
// DeleteWikiPage deletes a wiki page with a given slug.
//
// GitLab API docs: https://docs.gitlab.com/ce/api/wikis.html#delete-a-wiki-page
func (s *WikisService) DeleteWikiPage(pid interface{}, slug string, options ...OptionFunc) (*Response, error) {
project, err := parseID(pid)
if err != nil {
return nil, err
}
u := fmt.Sprintf("projects/%s/wikis/%s", url.QueryEscape(project), url.QueryEscape(slug))
req, err := s.client.NewRequest("DELETE", u, nil, options)
if err != nil {
return nil, err
}
return s.client.Do(req, nil)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment