nodester 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +58 -0
- data/Rakefile +10 -0
- data/lib/nodester/client.rb +194 -0
- data/lib/nodester/version.rb +3 -0
- data/lib/nodester.rb +5 -0
- data/nodester.gemspec +43 -0
- data/spec/client_spec.rb +131 -0
- data/spec/fakeweb_helper.rb +37 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/stubs/get_app +5 -0
- data/spec/stubs/get_apps +5 -0
- data/spec/stubs/platform_get_status +5 -0
- data/spec/stubs/platform_post_coupon +5 -0
- data/spec/stubs/post_app +5 -0
- metadata +145 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2011 Martin Wawrusch
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
|
2
|
+
WARNING: NOT RELEASED YET
|
3
|
+
|
4
|
+
= Nodester
|
5
|
+
|
6
|
+
An API wrapper for the nodester API (http://nodester.com). The initial version uses a straight approach, an ActiveResource like interface might be added if there is enough interest.
|
7
|
+
|
8
|
+
== Install
|
9
|
+
|
10
|
+
Include this in your gemfile
|
11
|
+
|
12
|
+
gem 'nodester'
|
13
|
+
|
14
|
+
== Use
|
15
|
+
|
16
|
+
client = Nodester::Client.new("username","password")
|
17
|
+
client.create_app 'myappname','server.js'
|
18
|
+
...
|
19
|
+
|
20
|
+
Note: There are a couple of methods, notably the platform_create_request and platform_status methods that
|
21
|
+
operate against www.nodester.com and not api.nodester.com, those do not require a userid/password. Just choose dummy/dummy or something similar.
|
22
|
+
|
23
|
+
All results are hashes, with strings (not symbols) as keys.
|
24
|
+
|
25
|
+
In case of an error either a ResponseError or a StandardError is raised.
|
26
|
+
|
27
|
+
== Dependencies
|
28
|
+
|
29
|
+
* Httparty
|
30
|
+
|
31
|
+
|
32
|
+
== Acknowledgments
|
33
|
+
|
34
|
+
Thanks to
|
35
|
+
|
36
|
+
* Aaron Russel (https://github.com/aaronrussell) whose cloudapp api helped a lot (some spec code is taken verbatim)
|
37
|
+
* John Nunemaker (https://github.com/jnunemaker) for httparty and all his other contributions.
|
38
|
+
|
39
|
+
|
40
|
+
== Trivia
|
41
|
+
|
42
|
+
This gem was created to the tunes of Natalia Kills and Nicki Minaj.
|
43
|
+
|
44
|
+
== Contributing to nodester
|
45
|
+
|
46
|
+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
47
|
+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
|
48
|
+
* Fork the project
|
49
|
+
* Start a feature/bugfix branch
|
50
|
+
* Commit and push until you are happy with your contribution
|
51
|
+
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
52
|
+
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
53
|
+
|
54
|
+
== Copyright
|
55
|
+
|
56
|
+
Copyright (c) 2011 Martin Wawrusch, inc. See LICENSE for
|
57
|
+
further details.
|
58
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Nodester
|
4
|
+
# An API wrapper for the nodester.com API
|
5
|
+
# @example Request a nodester.com coupon
|
6
|
+
# client = Nodester::Client.new("","")
|
7
|
+
# client.platform_coupon_request('arthur@dent.com')
|
8
|
+
#
|
9
|
+
# @example Convert a coupon (received per email) to an account
|
10
|
+
# client = Nodester::Client.new("","")
|
11
|
+
# client.platform_create_user("coupon",'arthur','dent','arthur@dent.com','rsakey')
|
12
|
+
#
|
13
|
+
# @example Get the platform status
|
14
|
+
# client = Nodester::Client.new("","")
|
15
|
+
# res = client.platform_status()
|
16
|
+
# puts "Status #{res['status']} Apps Hosted #{res['appshosted']} Apps Running #{res['appsrunning']}"
|
17
|
+
#
|
18
|
+
# @example Create an app
|
19
|
+
# client = Nodester::Client.new("arthur","dent")
|
20
|
+
# client.create_app 'myappname','server.js'
|
21
|
+
#
|
22
|
+
#
|
23
|
+
class Client
|
24
|
+
include HTTParty
|
25
|
+
base_uri 'http://api.nodester.com'
|
26
|
+
|
27
|
+
PLATFORM_URI = 'http://nodester.com'
|
28
|
+
|
29
|
+
def initialize(u, p )
|
30
|
+
@auth = {:username => u, :password => p}
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# Examines a bad response and raises an approriate exception
|
35
|
+
#
|
36
|
+
# @param [HTTParty::Response] response
|
37
|
+
def self.bad_response(response)
|
38
|
+
if response.class == HTTParty::Response
|
39
|
+
raise ResponseError, response
|
40
|
+
end
|
41
|
+
raise StandardError, "Unkown error"
|
42
|
+
end
|
43
|
+
|
44
|
+
def handle_result(res)
|
45
|
+
res.ok? ? res : bad_response(res)
|
46
|
+
end
|
47
|
+
|
48
|
+
# ------------------------------------
|
49
|
+
# Nodester.com platform specific functions
|
50
|
+
# ------------------------------------
|
51
|
+
|
52
|
+
# Creates a coupon request against nodester.com for early access
|
53
|
+
# Flow is as follows: You post this and receive a coupon per email.
|
54
|
+
# Parameters:
|
55
|
+
# email (required) : "x@y.com"
|
56
|
+
# Returns:
|
57
|
+
# status : "success - you are now in queue to receive an invite on our next batch!"
|
58
|
+
def platform_coupon_request(email)
|
59
|
+
options={ :body => {:email => email}, :base_uri => PLATFORM_URI}
|
60
|
+
handle_result self.class.post('/coupon', options)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Returns the nodester.com platform status
|
64
|
+
# {:status=>"up", :appshosted=>1599, :appsrunning=>988}
|
65
|
+
def platform_status()
|
66
|
+
options = {:base_uri => PLATFORM_URI}
|
67
|
+
handle_result self.class.get('/status', options)
|
68
|
+
end
|
69
|
+
|
70
|
+
# Creates a new user from the coupon given.
|
71
|
+
def platform_create_user(coupon,user,password,email,rsakey)
|
72
|
+
options={ :body => {:coupon => coupon,:user =>user,:password=>password,:email=>email,:rsakey=>rsakey}, :base_uri => PLATFORM_URI}
|
73
|
+
handle_result self.class.post('/user', options)
|
74
|
+
end
|
75
|
+
|
76
|
+
# ------------------------------------
|
77
|
+
# API specific functions
|
78
|
+
# ------------------------------------
|
79
|
+
|
80
|
+
# Updates the current user.
|
81
|
+
def update_user(opts={})
|
82
|
+
options={:body => opts,:basic_auth => @auth}
|
83
|
+
handle_result self.class.put('/user', options)
|
84
|
+
end
|
85
|
+
|
86
|
+
# Deletes the current user.
|
87
|
+
def platform_delete_user()
|
88
|
+
options={:basic_auth => @auth}
|
89
|
+
handle_result self.class.delete('/user', options)
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
# Creates a new app
|
95
|
+
# Parameters are:
|
96
|
+
# appname (required). The name of the app.
|
97
|
+
# start (required). The file to start, for example server.js.
|
98
|
+
# Returns:
|
99
|
+
# status : "success" | "failure"
|
100
|
+
# message : "some text" ==> Only if failure
|
101
|
+
# port : 12345
|
102
|
+
# gitrepo : 'git@nodester.com:/node/git/mwawrusch/blah.git'
|
103
|
+
# start : "the value of start, for example servre.js"
|
104
|
+
# running : true | false
|
105
|
+
# pid : "unknown" | some pid
|
106
|
+
def create_app(appname,start)
|
107
|
+
options={:body => {:appname=>appname,:start=>start}, :basic_auth => @auth}
|
108
|
+
handle_result self.class.post('/app', options)
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
def update_app(appname,opts = {})
|
113
|
+
opts.merge!({:appname => appname})
|
114
|
+
|
115
|
+
options={:body=> opts, :basic_auth => @auth}
|
116
|
+
handle_result self.class.put('/app', options)
|
117
|
+
end
|
118
|
+
|
119
|
+
def start_stop_app(appname,running = true)
|
120
|
+
|
121
|
+
options={:body=> {:appname => appname, :running=>start}, :basic_auth => @auth}
|
122
|
+
handle_result self.class.put('/app', options)
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
def delete_app(appname)
|
127
|
+
options={:body => {:appname => appname}, :basic_auth => @auth}
|
128
|
+
handle_result self.class.delete('/app', options)
|
129
|
+
end
|
130
|
+
|
131
|
+
def app(appname)
|
132
|
+
options={:body => {},:basic_auth => @auth}
|
133
|
+
handle_result self.class.get("/app/#{appname}", options)
|
134
|
+
end
|
135
|
+
|
136
|
+
# Get a list of all apps.
|
137
|
+
# Returns:
|
138
|
+
# An array containing a list of apps, if any.
|
139
|
+
#
|
140
|
+
# App object format:
|
141
|
+
# name : testxyz1
|
142
|
+
# port : 12344
|
143
|
+
# gitrepo : 'git@nodester.com:/node/git/mwawrusch/blah.git'
|
144
|
+
# running : false
|
145
|
+
# pid : "unknown" | some pid
|
146
|
+
# gitrepo : 'git@nodester.com:/node/git/mwawrusch/2914-2295037e88fed947a9b3b994171c5a9e.git", "running"=>false, "pid"=>"unknown"}
|
147
|
+
def apps()
|
148
|
+
options={:basic_auth => @auth}
|
149
|
+
handle_result self.class.get('/apps', options)
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
|
154
|
+
def update_env(appname,key,value)
|
155
|
+
options={:body => {:appname => appname,:key=>key,:value=>value},:basic_auth => @auth}
|
156
|
+
handle_result self.class.put('/env', options)
|
157
|
+
end
|
158
|
+
|
159
|
+
def delete_env(appname,key)
|
160
|
+
options={:body => {:appname => appname,:key=>key},:basic_auth => @auth}
|
161
|
+
handle_result self.class.delete('/env', options)
|
162
|
+
end
|
163
|
+
|
164
|
+
def env(appname,key)
|
165
|
+
options={:body => {:appname => appname,:key=>key},:basic_auth => @auth}
|
166
|
+
handle_result self.class.get('/env', options)
|
167
|
+
end
|
168
|
+
|
169
|
+
def update_npm(action,package)
|
170
|
+
options={:body => {:action => action,:package=>package},:basic_auth => @auth}
|
171
|
+
handle_result self.class.post('/npm', options)
|
172
|
+
end
|
173
|
+
|
174
|
+
|
175
|
+
def create_appdomain(appname,domain)
|
176
|
+
options={:body => {:appname => appname,:domain=>domain},:basic_auth => @auth}
|
177
|
+
handle_result self.class.post('/appdomains', options)
|
178
|
+
end
|
179
|
+
|
180
|
+
def delete_appdomain(appname,domain)
|
181
|
+
options={:body => {:appname => appname,:domain=>domain},:basic_auth => @auth}
|
182
|
+
handle_result self.class.delete('/appdomains', options)
|
183
|
+
end
|
184
|
+
|
185
|
+
def appdomains()
|
186
|
+
options={:basic_auth => @auth}
|
187
|
+
handle_result self.class.get('/appdomains', options)
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
end
|
192
|
+
|
193
|
+
end
|
194
|
+
|
data/lib/nodester.rb
ADDED
data/nodester.gemspec
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "nodester/version"
|
4
|
+
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "nodester"
|
8
|
+
s.version = Nodester::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Martin Wawrusch"]
|
11
|
+
s.email = ["martin@wawrusch.com"]
|
12
|
+
s.homepage = "http://github.com/scottyapp/nodester"
|
13
|
+
s.summary = %q{An API wrapper for the nodester API (http://nodester.com).}
|
14
|
+
s.description = %q{A gem that implements the nodester.com API which allows you to cloud-host node.js applications.}
|
15
|
+
s.extra_rdoc_files = ["LICENSE","README.md"]
|
16
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
17
|
+
s.rubyforge_project = "nodester"
|
18
|
+
|
19
|
+
s.files = `git ls-files`.split("\n")
|
20
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
|
24
|
+
s.add_runtime_dependency "httparty"
|
25
|
+
s.add_development_dependency "rspec", "~> 2.1"
|
26
|
+
s.add_development_dependency "rake", "~> 0.8"
|
27
|
+
s.add_development_dependency "fakeweb",">= 0"
|
28
|
+
s.add_development_dependency "bundler","~> 1.0.0"
|
29
|
+
#s.add_development_dependency "rcov", ">= 0"
|
30
|
+
s.post_install_message=<<eos
|
31
|
+
**********************************************************************************
|
32
|
+
Thank you for using this gem.
|
33
|
+
|
34
|
+
Follow @martin_sunset on Twitter for announcements, updates and news
|
35
|
+
https://twitter.com/martin_sunset
|
36
|
+
|
37
|
+
To get the source go to http://github.com/scottyapp/nodester
|
38
|
+
|
39
|
+
**********************************************************************************
|
40
|
+
eos
|
41
|
+
|
42
|
+
|
43
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'nodester'
|
3
|
+
|
4
|
+
describe Nodester::Client do
|
5
|
+
before(:each) do
|
6
|
+
fake_it_all
|
7
|
+
@client = Nodester::Client.new("arthur","dent")
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
context "when invoking platform_coupon_request" do
|
12
|
+
it "should be a success" do
|
13
|
+
res = @client.platform_coupon_request "arthur@dent.com"
|
14
|
+
res['status'].start_with?('success').should == true
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when invoking platform_status" do
|
19
|
+
it "should return a status" do
|
20
|
+
res = @client.platform_status
|
21
|
+
res['status'].should == "up"
|
22
|
+
res['appshosted'].should == 1599
|
23
|
+
res['appsrunning'].should == 988
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Need testing:
|
28
|
+
#platform_create_user
|
29
|
+
#update_user
|
30
|
+
#platform_delete_user
|
31
|
+
|
32
|
+
context "when invoking create_app" do
|
33
|
+
it "should create an app" do
|
34
|
+
res = @client.create_app "testapp","server.js"
|
35
|
+
res['status'].should == "success"
|
36
|
+
res['port'].should > 0
|
37
|
+
res['gitrepo'].start_with?('git@nodester.com:/node/git/').should == true
|
38
|
+
res['start'].should == 'server.js'
|
39
|
+
res['running'].should == false
|
40
|
+
res['pid'].should == 'unknown'
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
=begin
|
46
|
+
context "when invoking update_app" do
|
47
|
+
it "should update an app" do
|
48
|
+
res = @client.update_app
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when invoking start_stop_app" do
|
53
|
+
it "should start an app" do
|
54
|
+
res = @client.start_stop_app('testapp',true)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
context "when invoking delete_app" do
|
59
|
+
it "should delete an app" do
|
60
|
+
res = @client.delete_app
|
61
|
+
end
|
62
|
+
end
|
63
|
+
=end
|
64
|
+
|
65
|
+
context "when invoking app" do
|
66
|
+
it "should return app info" do
|
67
|
+
res = @client.app 'a1234'
|
68
|
+
res['status'].should == "success"
|
69
|
+
res['port'].should > 0
|
70
|
+
res['gitrepo'].start_with?('git@nodester.com:/node/git/').should == true
|
71
|
+
res['start'].should == 'server.js'
|
72
|
+
res['running'].should == false
|
73
|
+
res['pid'].should == 'unknown'
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "when invoking apps" do
|
79
|
+
it "should return a list of apps" do
|
80
|
+
res = @client.apps
|
81
|
+
res.length.should == 2
|
82
|
+
res[0]['name'].should == 'a1234'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
=begin
|
87
|
+
context "when invoking update_env" do
|
88
|
+
it "should set an env value" do
|
89
|
+
res = @client.update_env
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "when invoking delete_env" do
|
94
|
+
it "should remove an env value" do
|
95
|
+
res = @client.delete_env
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "when invoking env" do
|
100
|
+
it "should return an env value" do
|
101
|
+
res = @client.env
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when invoking update_npm" do
|
106
|
+
it "should perform an op against the npm" do
|
107
|
+
res = @client.update_npm
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
context "when invoking create_appdomain" do
|
113
|
+
it "should create an app domain" do
|
114
|
+
res = @client.create_appdomain
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
context "when invoking delete_appdomain" do
|
119
|
+
it "should delete an app domain" do
|
120
|
+
res = @client.delete_appdomain
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context "when invoking appdomains" do
|
125
|
+
it "should list all available appdomains" do
|
126
|
+
res = @client.update_npm
|
127
|
+
end
|
128
|
+
end
|
129
|
+
=end
|
130
|
+
|
131
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'fakeweb'
|
2
|
+
|
3
|
+
FakeWeb.allow_net_connect = false
|
4
|
+
|
5
|
+
def stub_file(stub)
|
6
|
+
File.join(File.dirname(__FILE__), 'stubs', stub)
|
7
|
+
end
|
8
|
+
|
9
|
+
def fake_it_all
|
10
|
+
FakeWeb.clean_registry
|
11
|
+
#FakeWeb.register_uri :head, %r{http://(api.)|(www.)?nodester.com(/items)?}, :status => ["200", "OK"]
|
12
|
+
|
13
|
+
{
|
14
|
+
# GET URLs
|
15
|
+
:get => {
|
16
|
+
'http://nodester.com/status' => 'platform_get_status',
|
17
|
+
'http://arthur:dent@api.nodester.com/apps' => 'get_apps',
|
18
|
+
%r|http://arthur:dent@api.nodester.com/app/[a-zA-Z0-0]+| => 'get_app'
|
19
|
+
},
|
20
|
+
# POST URLs
|
21
|
+
:post => {
|
22
|
+
'http://nodester.com/coupon' => 'platform_post_coupon',
|
23
|
+
'http://arthur:dent@api.nodester.com/app' => 'post_app'
|
24
|
+
},
|
25
|
+
# PUT URLs
|
26
|
+
:put => {
|
27
|
+
},
|
28
|
+
# DELETE URLs
|
29
|
+
:delete => {
|
30
|
+
}
|
31
|
+
}.each do |method, requests|
|
32
|
+
requests.each do |url, response|
|
33
|
+
FakeWeb.register_uri(method, url, :response => stub_file(response))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
require 'rspec'
|
6
|
+
require 'nodester'
|
7
|
+
require 'httparty'
|
8
|
+
require 'fakeweb_helper.rb'
|
9
|
+
|
10
|
+
|
11
|
+
# Requires supporting files with custom matchers and macros, etc,
|
12
|
+
# in ./support/ and its subdirectories.
|
13
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
14
|
+
|
15
|
+
RSpec.configure do |config|
|
16
|
+
config.color_enabled = true
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
|
data/spec/stubs/get_app
ADDED
data/spec/stubs/get_apps
ADDED
@@ -0,0 +1,5 @@
|
|
1
|
+
HTTP/1.1 200 OK
|
2
|
+
Status: 200
|
3
|
+
Content-Type: application/json; charset=utf-8
|
4
|
+
|
5
|
+
[{"name":"a1234","port":11092,"gitrepo":"git@nodester.com:/node/git/mwawrusch/2939-bf58ab1dd19cc93cc4427bb920c0ff4b.git","running":false,"pid":"unknown"},{"name":"testxyz123","port":11067,"gitrepo":"git@nodester.com:/node/git/mwawrusch/2914-2295037e88fed947a9b3b994171c5a9e.git","running":false,"pid":"unknown"}]
|
data/spec/stubs/post_app
ADDED
metadata
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nodester
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Martin Wawrusch
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-07-28 00:00:00 -07:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: httparty
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rspec
|
29
|
+
prerelease: false
|
30
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ~>
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: "2.1"
|
36
|
+
type: :development
|
37
|
+
version_requirements: *id002
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: rake
|
40
|
+
prerelease: false
|
41
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: "0.8"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id003
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: fakeweb
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
type: :development
|
59
|
+
version_requirements: *id004
|
60
|
+
- !ruby/object:Gem::Dependency
|
61
|
+
name: bundler
|
62
|
+
prerelease: false
|
63
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
64
|
+
none: false
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.0.0
|
69
|
+
type: :development
|
70
|
+
version_requirements: *id005
|
71
|
+
description: A gem that implements the nodester.com API which allows you to cloud-host node.js applications.
|
72
|
+
email:
|
73
|
+
- martin@wawrusch.com
|
74
|
+
executables: []
|
75
|
+
|
76
|
+
extensions: []
|
77
|
+
|
78
|
+
extra_rdoc_files:
|
79
|
+
- LICENSE
|
80
|
+
- README.md
|
81
|
+
files:
|
82
|
+
- .gitignore
|
83
|
+
- Gemfile
|
84
|
+
- LICENSE
|
85
|
+
- README.md
|
86
|
+
- Rakefile
|
87
|
+
- lib/nodester.rb
|
88
|
+
- lib/nodester/client.rb
|
89
|
+
- lib/nodester/version.rb
|
90
|
+
- nodester.gemspec
|
91
|
+
- spec/client_spec.rb
|
92
|
+
- spec/fakeweb_helper.rb
|
93
|
+
- spec/spec_helper.rb
|
94
|
+
- spec/stubs/get_app
|
95
|
+
- spec/stubs/get_apps
|
96
|
+
- spec/stubs/platform_get_status
|
97
|
+
- spec/stubs/platform_post_coupon
|
98
|
+
- spec/stubs/post_app
|
99
|
+
has_rdoc: true
|
100
|
+
homepage: http://github.com/scottyapp/nodester
|
101
|
+
licenses: []
|
102
|
+
|
103
|
+
post_install_message: |
|
104
|
+
**********************************************************************************
|
105
|
+
Thank you for using this gem.
|
106
|
+
|
107
|
+
Follow @martin_sunset on Twitter for announcements, updates and news
|
108
|
+
https://twitter.com/martin_sunset
|
109
|
+
|
110
|
+
To get the source go to http://github.com/scottyapp/nodester
|
111
|
+
|
112
|
+
**********************************************************************************
|
113
|
+
|
114
|
+
rdoc_options:
|
115
|
+
- --charset=UTF-8
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
120
|
+
requirements:
|
121
|
+
- - ">="
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: "0"
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
none: false
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: "0"
|
130
|
+
requirements: []
|
131
|
+
|
132
|
+
rubyforge_project: nodester
|
133
|
+
rubygems_version: 1.5.0
|
134
|
+
signing_key:
|
135
|
+
specification_version: 3
|
136
|
+
summary: An API wrapper for the nodester API (http://nodester.com).
|
137
|
+
test_files:
|
138
|
+
- spec/client_spec.rb
|
139
|
+
- spec/fakeweb_helper.rb
|
140
|
+
- spec/spec_helper.rb
|
141
|
+
- spec/stubs/get_app
|
142
|
+
- spec/stubs/get_apps
|
143
|
+
- spec/stubs/platform_get_status
|
144
|
+
- spec/stubs/platform_post_coupon
|
145
|
+
- spec/stubs/post_app
|