diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2017-03-07 16:55:03 +0800 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2017-03-07 16:55:03 +0800 |
commit | fb167787f2c470649195a5d623f489ec2c3a9117 (patch) | |
tree | ad60222b53a11ee2b29131f57e24ba66dd823c3d /app/assets/javascripts/subbable_resource.js | |
parent | 7c9cff3a744a64848207bfde1aedcfe652f07dce (diff) | |
parent | 24f1ee5e9b1f4d9bc8cff581419b091756da8deb (diff) | |
download | gitlab-ce-fb167787f2c470649195a5d623f489ec2c3a9117.tar.gz |
Merge remote-tracking branch 'upstream/master' into set-default-cache-key-for-jobs
* upstream/master: (289 commits)
re-add Assign to Me link on new MR/Issue forms
thinner bottom header border
make header match old 16px padding of body contents
Update font-awesome-rails to 4.7.0.1
Relax font-awesome-rails dependency to ~> 4.7
Restore keyboard shortcuts for "Activity" and "Charts"
fix border radius bottom for header
match padding for mr-widget sections
Update changelog
Fix project-last-commit alignment
Docs: update GL Pages IP on GL.com
Fix up @DouweM review
Remove readme-only project view preference
Add `uploads` to known models for Import/Export spec
Add `has_many` associations for models that can have Upload records
Handle relative and absolute Upload paths in the Uploaders
Change the default CarrierWave root path for tests
Fix Projects::UploadService spec
Add a Project::UploadsController spec to ensure an Upload is created
Add `RecordsUploads` module to record Upload records via callbacks
...
Diffstat (limited to 'app/assets/javascripts/subbable_resource.js')
-rw-r--r-- | app/assets/javascripts/subbable_resource.js | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/app/assets/javascripts/subbable_resource.js b/app/assets/javascripts/subbable_resource.js new file mode 100644 index 00000000000..d8191605128 --- /dev/null +++ b/app/assets/javascripts/subbable_resource.js @@ -0,0 +1,51 @@ +(() => { +/* +* SubbableResource can be extended to provide a pubsub-style service for one-off REST +* calls. Subscribe by passing a callback or render method you will use to handle responses. + * +* */ + + class SubbableResource { + constructor(resourcePath) { + this.endpoint = resourcePath; + + // TODO: Switch to axios.create + this.resource = $.ajax; + this.subscribers = []; + } + + subscribe(callback) { + this.subscribers.push(callback); + } + + publish(newResponse) { + const responseCopy = _.extend({}, newResponse); + this.subscribers.forEach((fn) => { + fn(responseCopy); + }); + return newResponse; + } + + get(payload) { + return this.resource(payload) + .then(data => this.publish(data)); + } + + post(payload) { + return this.resource(payload) + .then(data => this.publish(data)); + } + + put(payload) { + return this.resource(payload) + .then(data => this.publish(data)); + } + + delete(payload) { + return this.resource(payload) + .then(data => this.publish(data)); + } + } + + gl.SubbableResource = SubbableResource; +})(window.gl || (window.gl = {})); |