summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/repo/services/repo_service.js
blob: af83497fa394865391035ade0a965f9b156b556c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/* global Flash */
import axios from 'axios';
import Store from '../stores/repo_store';
import Api from '../../api';
import Helper from '../helpers/repo_helper';

const RepoService = {
  url: '',
  options: {
    params: {
      format: 'json',
    },
  },
  richExtensionRegExp: /md/,

  getRaw(url) {
    return axios.get(url, {
      // Stop Axios from parsing a JSON file into a JS object
      transformResponse: [res => res],
    });
  },

  buildParams(url = this.url) {
    // shallow clone object without reference
    const params = Object.assign({}, this.options.params);

    if (this.urlIsRichBlob(url)) params.viewer = 'rich';

    return params;
  },

  urlIsRichBlob(url = this.url) {
    const extension = Helper.getFileExtension(url);

    return this.richExtensionRegExp.test(extension);
  },

  getContent(url = this.url) {
    const params = this.buildParams(url);

    return axios.get(url, {
      params,
    });
  },

  getBase64Content(url = this.url) {
    const request = axios.get(url, {
      responseType: 'arraybuffer',
    });

    return request.then(response => this.bufferToBase64(response.data));
  },

  bufferToBase64(data) {
    return new Buffer(data, 'binary').toString('base64');
  },

  blobURLtoParentTree(url) {
    const urlArray = url.split('/');
    urlArray.pop();
    const blobIndex = urlArray.lastIndexOf('blob');

    if (blobIndex > -1) urlArray[blobIndex] = 'tree';

    return urlArray.join('/');
  },

  commitFiles(payload) {
    return Api.commitMultiple(Store.projectId, payload)
      .then(this.commitFlash);
  },

  commitFlash(data) {
    if (data.short_id && data.stats) {
      window.Flash(`Your changes have been committed. Commit ${data.short_id} with ${data.stats.additions} additions, ${data.stats.deletions} deletions.`, 'notice');
    } else {
      window.Flash(data.message);
    }
  },
};

export default RepoService;