Class: DynectRest
- Inherits:
-
Object
- Object
- DynectRest
- Defined in:
- lib/dynect_rest.rb,
lib/dynect_rest/resource.rb,
lib/dynect_rest/exceptions.rb
Overview
- Author
-
Adam Jacob (<[email protected]>)
- Copyright
-
Copyright © 2010 Opscode, Inc.
- License
-
Apache License, Version 2.0
Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Defined Under Namespace
Classes: Exceptions, Resource
Instance Attribute Summary collapse
-
#customer_name ⇒ Object
Returns the value of attribute customer_name.
-
#password ⇒ Object
Returns the value of attribute password.
-
#rest ⇒ Object
Returns the value of attribute rest.
-
#user_name ⇒ Object
Returns the value of attribute user_name.
-
#zone ⇒ Object
Returns the value of attribute zone.
Class Method Summary collapse
-
.underscore(string) ⇒ Object
Convert a CamelCasedString to an under_scored_string.
Instance Method Summary collapse
-
#api_request(&block) ⇒ Object
Handles making Dynect API requests and formatting the responses properly.
-
#delete(path_part, additional_headers = {}, &block) ⇒ Object
Raw DELETE request, formatted for Dyn.
-
#freeze(zone = nil) ⇒ Hash
Freeze the zone.
-
#get(path_part, additional_headers = {}, &block) ⇒ Object
Raw GET request, formatted for Dyn.
-
#get_zone(zone = nil) ⇒ Hash
Zone.
-
#initialize(customer_name, user_name, password, zone = nil, connect = true, verbose = false) ⇒ DynectRest
constructor
Creates a new base object for interacting with Dynect’s REST API.
-
#login ⇒ Hash
Login to Dynect - must be done before any other methods called.
-
#logout ⇒ Hash
Logout of Dynect - must be done before any other methods called.
- #parse_response(response) ⇒ Object
-
#post(path_part, payload, additional_headers = {}, &block) ⇒ Object
Raw POST request, formatted for Dyn.
-
#publish(zone = nil) ⇒ Hash
Publish any pending changes to the zone - required to make any alterations permanent.
-
#put(path_part, payload, additional_headers = {}, &block) ⇒ Object
Raw PUT request, formatted for Dyn.
-
#record_type ⇒ Object
Resource Records.
-
#thaw(zone = nil) ⇒ Hash
Thaw the zone.
Constructor Details
#initialize(customer_name, user_name, password, zone = nil, connect = true, verbose = false) ⇒ DynectRest
Creates a new base object for interacting with Dynect’s REST API
36 37 38 39 40 41 42 43 44 |
# File 'lib/dynect_rest.rb', line 36 def initialize(customer_name, user_name, password, zone=nil, connect=true, verbose=false) @customer_name = customer_name @user_name = user_name @password = password @rest = RestClient::Resource.new('https://api2.dynect.net/REST/', :headers => { :content_type => 'application/json' }) @zone = zone @verbose = verbose login if connect end |
Instance Attribute Details
#customer_name ⇒ Object
Returns the value of attribute customer_name.
26 27 28 |
# File 'lib/dynect_rest.rb', line 26 def customer_name @customer_name end |
#password ⇒ Object
Returns the value of attribute password.
26 27 28 |
# File 'lib/dynect_rest.rb', line 26 def password @password end |
#rest ⇒ Object
Returns the value of attribute rest.
26 27 28 |
# File 'lib/dynect_rest.rb', line 26 def rest @rest end |
#user_name ⇒ Object
Returns the value of attribute user_name.
26 27 28 |
# File 'lib/dynect_rest.rb', line 26 def user_name @user_name end |
#zone ⇒ Object
Returns the value of attribute zone.
26 27 28 |
# File 'lib/dynect_rest.rb', line 26 def zone @zone end |
Class Method Details
.underscore(string) ⇒ Object
Convert a CamelCasedString to an under_scored_string.
118 119 120 121 122 123 124 125 126 |
# File 'lib/dynect_rest.rb', line 118 def self.underscore(string) word = string.dup word.gsub!(/::/, '/') word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2') word.gsub!(/([a-z\d])([A-Z])/,'\1_\2') word.tr!("-", "_") word.downcase! word end |
Instance Method Details
#api_request(&block) ⇒ Object
Handles making Dynect API requests and formatting the responses properly.
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/dynect_rest.rb', line 184 def api_request(&block) response_body = begin response = block.call response.body rescue RestClient::Exception => e if @verbose puts "I have #{e.inspect} with #{e.http_code}" end if e.http_code == 307 get(e.response) end e.response end parse_response(JSON.parse(response_body)) end |
#delete(path_part, additional_headers = {}, &block) ⇒ Object
Raw DELETE request, formatted for Dyn. See list of endpoints at:
153 154 155 |
# File 'lib/dynect_rest.rb', line 153 def delete(path_part, additional_headers = {}, &block) api_request { @rest[path_part].delete(additional_headers, &block) } end |
#freeze(zone = nil) ⇒ Hash
Freeze the zone.
See: manage.dynect.net/help/docs/api2/rest/resources/Zone.html
101 102 103 104 |
# File 'lib/dynect_rest.rb', line 101 def freeze(zone=nil) zone ||= @zone put("Zone/#{zone}", { "freeze" => true }) end |
#get(path_part, additional_headers = {}, &block) ⇒ Object
Raw GET request, formatted for Dyn. See list of endpoints at:
143 144 145 |
# File 'lib/dynect_rest.rb', line 143 def get(path_part, additional_headers = {}, &block) api_request { @rest[path_part].get(additional_headers, &block) } end |
#get_zone(zone = nil) ⇒ Hash
79 80 81 82 |
# File 'lib/dynect_rest.rb', line 79 def get_zone(zone=nil) zone ||= @zone get("Zone/#{zone}") end |
#login ⇒ Hash
Login to Dynect - must be done before any other methods called.
See: manage.dynect.net/help/docs/api2/rest/resources/Session.html
55 56 57 58 59 |
# File 'lib/dynect_rest.rb', line 55 def login response = post('Session', { 'customer_name' => @customer_name, 'user_name' => @user_name, 'password' => @password }) @rest.headers[:auth_token] = response["token"] response end |
#logout ⇒ Hash
Logout of Dynect - must be done before any other methods called.
See: manage.dynect.net/help/docs/api2/rest/resources/Session.html
66 67 68 |
# File 'lib/dynect_rest.rb', line 66 def logout delete('Session') end |
#parse_response(response) ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 211 |
# File 'lib/dynect_rest.rb', line 200 def parse_response(response) case response["status"] when "success" response["data"] when "failure", "incomplete" = [] response["msgs"].each do || << "#{["LVL"]} #{["ERR_CD"]} #{["SOURCE"]} - #{["INFO"]}" end raise DynectRest::Exceptions::RequestFailed, "Request failed: #{.join("\n")}" end end |
#post(path_part, payload, additional_headers = {}, &block) ⇒ Object
Raw POST request, formatted for Dyn. See list of endpoints at:
manage.dynect.net/help/docs/api2/rest/resources/
Read the API documentation, and submit the proper data structure from here.
166 167 168 |
# File 'lib/dynect_rest.rb', line 166 def post(path_part, payload, additional_headers = {}, &block) api_request { @rest[path_part].post(payload.to_json, additional_headers, &block) } end |
#publish(zone = nil) ⇒ Hash
Publish any pending changes to the zone - required to make any alterations permanent.
See: manage.dynect.net/help/docs/api2/rest/resources/Zone.html
90 91 92 93 |
# File 'lib/dynect_rest.rb', line 90 def publish(zone=nil) zone ||= @zone put("Zone/#{zone}", { "publish" => true }) end |
#put(path_part, payload, additional_headers = {}, &block) ⇒ Object
Raw PUT request, formatted for Dyn. See list of endpoints at:
manage.dynect.net/help/docs/api2/rest/resources/
Read the API documentation, and submit the proper data structure from here.
179 180 181 |
# File 'lib/dynect_rest.rb', line 179 def put(path_part, payload, additional_headers = {}, &block) api_request { @rest[path_part].put(payload.to_json, additional_headers, &block) } end |
#record_type ⇒ Object
Resource Records
131 132 133 134 135 |
# File 'lib/dynect_rest.rb', line 131 %w{AAAA A CNAME DNSKEY DS KEY LOC MX NS PTR RP SOA SRV TXT}.each do |record_type| define_method underscore(record_type) do DynectRest::Resource.new(self,"#{record_type}" , @zone) end end |
#thaw(zone = nil) ⇒ Hash
Thaw the zone.
See: manage.dynect.net/help/docs/api2/rest/resources/Zone.html
112 113 114 115 |
# File 'lib/dynect_rest.rb', line 112 def thaw(zone=nil) zone ||= @zone put("Zone/#{zone}", { "thaw" => true }) end |