From d1c6caabd6e45db682c2889c6e04a4066b088c81 Mon Sep 17 00:00:00 2001 From: Kevin Sawicki & Nathan Sobo Date: Thu, 10 Jan 2013 11:14:23 -0800 Subject: [PATCH] Add package to create a Gist from the editor --- src/packages/gists/index.coffee | 1 + src/packages/gists/keymaps/gists.cson | 2 + src/packages/gists/lib/gists.coffee | 19 ++++++++++ src/packages/gists/spec/gists-spec.coffee | 45 +++++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 src/packages/gists/index.coffee create mode 100644 src/packages/gists/keymaps/gists.cson create mode 100644 src/packages/gists/lib/gists.coffee create mode 100644 src/packages/gists/spec/gists-spec.coffee diff --git a/src/packages/gists/index.coffee b/src/packages/gists/index.coffee new file mode 100644 index 000000000..689bcbeae --- /dev/null +++ b/src/packages/gists/index.coffee @@ -0,0 +1 @@ +module.exports = require './lib/gists' diff --git a/src/packages/gists/keymaps/gists.cson b/src/packages/gists/keymaps/gists.cson new file mode 100644 index 000000000..fa7699100 --- /dev/null +++ b/src/packages/gists/keymaps/gists.cson @@ -0,0 +1,2 @@ +'body': + 'alt-meta-g': 'gist:create' diff --git a/src/packages/gists/lib/gists.coffee b/src/packages/gists/lib/gists.coffee new file mode 100644 index 000000000..ee5591988 --- /dev/null +++ b/src/packages/gists/lib/gists.coffee @@ -0,0 +1,19 @@ +$ = require 'jquery' + +module.exports = + activate: (rootView) -> + rootView.command 'gist:create', '.editor', (e) => + @createGist(e.currentTargetView()) + + createGist: (editor) -> + gist = { public: false, files: {} } + gist.files[editor.getBuffer().getBaseName()] = + content: editor.getSelectedText() or editor.getText() + + $.ajax + url: 'https://api.github.com/gists' + type: 'POST' + dataType: 'json' + contentType: 'application/json; charset=UTF-8' + data: JSON.stringify(gist) + success: (response) -> pasteboard.write(response.html_url) diff --git a/src/packages/gists/spec/gists-spec.coffee b/src/packages/gists/spec/gists-spec.coffee new file mode 100644 index 000000000..c4f69c9c7 --- /dev/null +++ b/src/packages/gists/spec/gists-spec.coffee @@ -0,0 +1,45 @@ +RootView = require 'root-view' +$ = require 'jquery' + +describe "Gists package", -> + + [rootView, editor] = [] + + beforeEach -> + rootView = new RootView(fixturesProject.resolve('sample.js')) + atom.loadPackage('gists') + editor = rootView.getActiveEditor() + spyOn($, 'ajax') + + afterEach -> + rootView.deactivate() + + describe "when gist:create is triggered on an editor", -> + + describe "when the editor has no selection", -> + it "creates an Ajax request to api.github.com with the entire buffer contents as the Gist's content", -> + editor.trigger 'gist:create' + expect($.ajax).toHaveBeenCalled() + request = $.ajax.argsForCall[0][0] + expect(request.url).toBe 'https://api.github.com/gists' + expect(request.type).toBe 'POST' + requestData = JSON.parse(request.data) + expect(requestData.public).toBeFalsy() + expect(requestData.files).toEqual 'sample.js': content: editor.getText() + + it "places the created Gist's URL on the clipboard", -> + editor.trigger 'gist:create' + request = $.ajax.argsForCall[0][0] + request.success(html_url: 'https://gist.github.com/1') + expect(pasteboard.read()[0]).toBe 'https://gist.github.com/1' + + describe "when the editor has a selection", -> + beforeEach -> + editor.setSelectedBufferRange [[4, 0], [8, 0]] + + it "creates an Ajax with the selected text as the Gist's content", -> + editor.trigger 'gist:create' + expect($.ajax).toHaveBeenCalled() + request = $.ajax.argsForCall[0][0] + requestData = JSON.parse(request.data) + expect(requestData.files).toEqual 'sample.js': content: editor.getSelectedText()