Class: DevStructure::API::Blueprints
- Inherits:
-
Object
- Object
- DevStructure::API::Blueprints
- Includes:
- DevStructure
- Defined in:
- lib/devstructure/api.rb
Overview
Blueprints objects represent a particular user's blueprint collection
but is supremely lazy about fetching it.
Instance Method Summary collapse
-
#delete(name, options = {}) ⇒ Object
Delete a blueprint and all its versions.
-
#get(name, token = nil) ⇒ Object
The API version of
blueprint-show(1). -
#initialize(api, username = nil) ⇒ Blueprints
constructor
This ugly constructor should be eschewed in favor of
API#blueprints. -
#list ⇒ Object
The API version of
blueprint-list(1). -
#method_missing(symbol, *args) ⇒ Object
The
method_missinghandler allows natural-looking code likeblueprints.foo.barthat look like the URIs they're referencing behind the scenes. -
#post(name, options = {}) ⇒ Object
The API version of
blueprint-create(1).
Constructor Details
#initialize(api, username = nil) ⇒ Blueprints
This ugly constructor should be eschewed in favor of API#blueprints.
70 71 72 73 |
# File 'lib/devstructure/api.rb', line 70 def initialize(api, username=nil) @api = api @username = username end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(symbol, *args) ⇒ Object
The method_missing handler allows natural-looking code like
blueprints.foo.bar that look like the URIs they're referencing
behind the scenes. These are limited to reads when taken all the
way to referencing a specific blueprint. Just referencing a user
this way still allows writes.
80 81 82 83 84 85 86 87 |
# File 'lib/devstructure/api.rb', line 80 def method_missing(symbol, *args) if @username get symbol.to_s else @username = symbol.to_s self end end |
Instance Method Details
#delete(name, options = {}) ⇒ Object
Delete a blueprint and all its versions.
148 149 150 151 |
# File 'lib/devstructure/api.rb', line 148 def delete(name, ={}) @api.start unless @api.started? @api.delete(@api.path("blueprints", @username, name), @api.headers) end |
#get(name, token = nil) ⇒ Object
The API version of
blueprint-show(1).
It returns a DevStructure::Blueprint object.
104 105 106 107 108 109 110 111 |
# File 'lib/devstructure/api.rb', line 104 def get(name, token=nil) @api.start unless @api.started? response = @api.get(@api.path("blueprints", @username, name, token), @api.headers) return response unless Net::HTTPOK == response.class hash = JSON.parse(response.body) Blueprint.new(hash["name"], hash) end |
#list ⇒ Object
The API version of
blueprint-list(1).
It returns an array of DevStructure::Blueprint objects.
92 93 94 95 96 97 98 99 |
# File 'lib/devstructure/api.rb', line 92 def list @api.start unless @api.started? response = @api.get(@api.path("blueprints", @username), @api.headers) return response unless Net::HTTPOK == response.class JSON.parse(response.body).collect do |hash| Blueprint.new(hash["name"], hash) end end |
#post(name, options = {}) ⇒ Object
The API version of
blueprint-create(1).
It encodes and POSTs a blueprint and uploads to S3 any source tarballs
referenced. The S3 upload credentials come back as part of the API
response. Each set of headers is only valid for that particular
upload and even then only for a few minutes.
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/devstructure/api.rb', line 119 def post(name, ={}) @api.start unless @api.started? params = {} .each do |key, value| params[key] = if value.kind_of?(Hash) JSON.generate(value) else value end end request = Net::HTTP::Post.new(@api.path("blueprints", @username, name)) request.set_form_data params @api.headers.each { |key, value| request[key] = value } response = @api.request(request) if Net::HTTPOK === response uri = URI.parse("http://s3.amazonaws.com") http = Net::HTTP.start(uri.host, uri.port) JSON.parse(response.body).each do |filename, headers| request = Net::HTTP::Put.new("/blueprint-sources/#{filename}") headers.each { |key, value| request[key] = value } request["Content-Length"] = File.size(filename) request.body_stream = File.open(filename, "r") http.request(request) end end response end |