lib/nodester/client.rb in nodester-0.0.2 vs lib/nodester/client.rb in nodester-0.0.3

- old
+ new

@@ -1,9 +1,13 @@ require 'httparty' +# @author Martin Wawrusch +# +# An API wrapper for the http://nodester.com API +# @see Client Client documentation for examples how to use the API. module Nodester - # An API wrapper for the nodester.com API + # The client to access the API. # @example Request a nodester.com coupon # client = Nodester::Client.new("","") # client.platform_coupon_request('arthur@dent.com') # # @example Convert a coupon (received per email) to an account @@ -22,175 +26,241 @@ # class Client include HTTParty base_uri 'http://api.nodester.com' + # The uri used to access the nodester.com platform for account management + # and status purposes. PLATFORM_URI = 'http://nodester.com' + # Inititalizer for the client class. + # @param [String] u the user name of your nodester.com account. + # @param [String] p the password of your nodester.com account. + # @return [Client] a new instance of the client. def initialize(u, p ) @auth = {:username => u, :password => p} end - - # Examines a bad response and raises an approriate exception +private + # Examines a bad response and raises an appropriate exception # - # @param [HTTParty::Response] response + # @param [HTTParty::Response] the response as returned by the web request. + # @raise [ResponseError] raised in case of a web service related error. + # @raise [StandardError] raised in case of an error that is not web service related. + # @return [HTTParty::Response] the response as returned by the web request. def self.bad_response(response) if response.class == HTTParty::Response raise ResponseError, response end raise StandardError, "Unkown error" end - def handle_result(res) - res.ok? ? res : bad_response(res) + # Examines a response and either returns the response or + # raise an exception. + # @param [HTTParty::Response] the response as returned by the web request. + # @raise [ResponseError] raised in case of a web service related error. + # @raise [StandardError] raised in case of an error that is not web service related. + # @return [HTTParty::Response] the response as returned by the web request. + def handle_result(response) + response.ok? ? response : bad_response(response) end - # ------------------------------------ - # Nodester.com platform specific functions - # ------------------------------------ - - # Creates a coupon request against nodester.com for early access - # Flow is as follows: You post this and receive a coupon per email. - # Parameters: - # email (required) : "x@y.com" - # Returns: - # status : "success - you are now in queue to receive an invite on our next batch!" +public + # Creates a coupon request against http://nodester.com for early access. + # @param (String) email the email where the coupon should be sent to. + # @return [HTTParty::Response] A response. + # @note Flow is as follows: You post this and receive a coupon per email. + # The result contains the following entries (check http://nodester.com for up to date information): + # * 'status' : "success - you are now in queue to receive an invite on our next batch!" | "failure" def platform_coupon_request(email) options={ :body => {:email => email}, :base_uri => PLATFORM_URI} handle_result self.class.post('/coupon', options) end - # Returns the nodester.com platform status - # {:status=>"up", :appshosted=>1599, :appsrunning=>988} + # Retrieves the http://nodester.com platform status + # @return [HTTParty::Response] A response + # @note The result contains the following entries (check http://nodester.com for up to date information): + # * 'status' : "up" + # * 'appshosted' : 599 + # * 'appsrunning' : 988 def platform_status() options = {:base_uri => PLATFORM_URI} handle_result self.class.get('/status', options) end - # Creates a new user from the coupon given. + # Creates a new user by redeeming a coupon. + # @see Client#platform_coupon_request platform_coupon_request for details on how to obtain a coupon. + # + # @param (String) coupon the coupon received from nodester. + # @param (String) user the user name of the new user. + # @param (String) password the password of the new user. + # @param (String) email the email of the new user. + # @param (String) rsakey the rsa key of the new user. + # @return [HTTParty::Response] A response. def platform_create_user(coupon,user,password,email,rsakey) options={ :body => {:coupon => coupon,:user =>user,:password=>password,:email=>email,:rsakey=>rsakey}, :base_uri => PLATFORM_URI} handle_result self.class.post('/user', options) end # ------------------------------------ # API specific functions # ------------------------------------ - # Updates the current user. + # Updates the settings for the current user. + # @option opts [String] :password the password to update. + # @option opts [String] :rsakey the rsa key to update. + # @return [HTTParty::Response] A response. def update_user(opts={}) options={:body => opts,:basic_auth => @auth} handle_result self.class.put('/user', options) end # Deletes the current user. + # @return [HTTParty::Response] A response. def platform_delete_user() options={:basic_auth => @auth} handle_result self.class.delete('/user', options) end - # Creates a new app - # Parameters are: - # appname (required). The name of the app. - # start (required). The file to start, for example server.js. - # Returns: - # status : "success" | "failure" - # message : "some text" ==> Only if failure - # port : 12345 - # gitrepo : 'git@nodester.com:/node/git/mwawrusch/blah.git' - # start : "the value of start, for example servre.js" - # running : true | false - # pid : "unknown" | some pid + # Creates a new app. + # @param (String) appname the name of the app. + # @param (String) start the file that contains the node.js startup code. (server.js) + # @return [HTTParty::Response] A response. + # @note The result contains the following entries (check http://nodester.com for up to date information): + # * 'status' : "success" | "failure" + # * 'message' : "some text" ==> Only if failure + # * 'port' : 12345 + # * 'gitrepo' : 'git@nodester.com:/node/git/mwawrusch/blah.git' + # * 'start' : "the value of start, for example servre.js" + # * 'running' : true | false + # * 'pid' : "unknown" | some pid def create_app(appname,start) options={:body => {:appname=>appname,:start=>start}, :basic_auth => @auth} handle_result self.class.post('/app', options) end - + # Updates properties of an app. + # @param (String) appname the name of the app. + # @option opts [String] :start the startup file that contains the node.js startup code. + # @return [HTTParty::Response] A response. def update_app(appname,opts = {}) opts.merge!({:appname => appname}) options={:body=> opts, :basic_auth => @auth} handle_result self.class.put('/app', options) end - + + # Starts or stops an app. + # @param (String) appname the name of the app. + # @param (Boolean) running true to start the app; false to stop the app. + # @return [HTTParty::Response] A response. def start_stop_app(appname,running = true) options={:body=> {:appname => appname, :running=>start}, :basic_auth => @auth} handle_result self.class.put('/app', options) end - + # Deletes an app. + # @param (String) appname the name of the app. + # @return [HTTParty::Response] A response. def delete_app(appname) options={:body => {:appname => appname}, :basic_auth => @auth} handle_result self.class.delete('/app', options) end + # Returns the properties of an app. + # @param (String) appname the name of the app. + # @return [HTTParty::Response] A response. def app(appname) options={:body => {},:basic_auth => @auth} handle_result self.class.get("/app/#{appname}", options) end - # Get a list of all apps. - # Returns: + # Returns a list of all apps. + # @return [HTTParty::Response] A response. # An array containing a list of apps, if any. - # - # App object format: - # name : testxyz1 - # port : 12344 - # gitrepo : 'git@nodester.com:/node/git/mwawrusch/blah.git' - # running : false - # pid : "unknown" | some pid - # gitrepo : 'git@nodester.com:/node/git/mwawrusch/2914-2295037e88fed947a9b3b994171c5a9e.git", "running"=>false, "pid"=>"unknown"} + # @note The result contains the following entries (check http://nodester.com for up to date information): + # * 'name' : 'testxyz1' + # * 'port' : 12344 + # * 'gitrepo' : 'git@nodester.com:/node/git/mwawrusch/blah.git' + # * 'running' : false + # * 'pid' : "unknown" | some pid + # * 'gitrepo' : 'git@nodester.com:/node/git/mwawrusch/2914-2295037e88fed947a9b3b994171c5a9e.git", "running"=>false, "pid"=>"unknown"} def apps() options={:basic_auth => @auth} handle_result self.class.get('/apps', options) end - + # Creates or updates a value for a key in the app's environment. + # @param (String) appname the name of the app. + # @param (String) key the key (name) of the evironment variable. + # @param (String) value the value of the environment variable. + # @return [HTTParty::Response] A response. def update_env(appname,key,value) options={:body => {:appname => appname,:key=>key,:value=>value},:basic_auth => @auth} handle_result self.class.put('/env', options) end + # Deletes a key from the app's environment. + # @param (String) appname the name of the app. + # @param (String) key the key (name) of the evironment variable. + # @return [HTTParty::Response] A response. def delete_env(appname,key) options={:body => {:appname => appname,:key=>key},:basic_auth => @auth} handle_result self.class.delete('/env', options) end + # Returns the value of a key in the app's environment. + # @param (String) appname the name of the app. + # @param (String) key the key (name) of the evironment variable. + # @return [HTTParty::Response] A response. def env(appname,key) options={:body => {:appname => appname,:key=>key},:basic_auth => @auth} handle_result self.class.get('/env', options) end # curl -X POST -u "mwawrusch:mw09543089" -d "appname=myappname&action=install&package=express" http://api.nodester.com/npm + # Manages the NPM package manager associated with an app. + # @param (String) appname the name of the app. + # @param (String) action the action to perform. Can be install|upgrade|uninstall. Check official documentation + # for more info. + # @param (String) package the name of the package that should be worked with. + # @return [HTTParty::Response] A response. def update_npm(appname,action,package) options={:body => {:appname => appname,:action => action,:package=>package},:basic_auth => @auth} handle_result self.class.post('/npm', options) end - + # Creates a new domain entry for an app. + # @note Check out the http://notester.com site for up to date information how to set your + # a record to route the domain to the actual servers. + # @param (String) appname the name of the app. + # @param (String) domain the domain to be associated with the app. + # @return [HTTParty::Response] A response. def create_appdomain(appname,domain) options={:body => {:appname => appname,:domain=>domain},:basic_auth => @auth} handle_result self.class.post('/appdomains', options) end + # Deletes a domain entry from an app. + # @param (String) appname the name of the app. + # @param (String) domain the domain to be disassociated from the app. + # @return [HTTParty::Response] A response. def delete_appdomain(appname,domain) options={:body => {:appname => appname,:domain=>domain},:basic_auth => @auth} handle_result self.class.delete('/appdomains', options) end + # Returns a list of all app domains for all apps of the current user. + # @return [HTTParty::Response] A response. def appdomains() options={:basic_auth => @auth} handle_result self.class.get('/appdomains', options) end - - - end + end end