class Payload::ARMRequest
Public Class Methods
new(cls=nil)
click to toggle source
# File lib/payload/arm/request.rb, line 11 def initialize(cls=nil) @cls = cls @filters = {} end
Public Instance Methods
_request(method, id: nil, json: nil)
click to toggle source
# File lib/payload/arm/request.rb, line 86 def _request(method, id: nil, json: nil) if @cls.spec.key?("endpoint") endpoint = @cls.spec["endpoint"] else endpoint = "/"+@cls.spec["object"]+"s" end if id endpoint = File.join(endpoint, id) end url = URI.join(Payload::api_url, endpoint) url.query = URI.encode_www_form(@filters) http = Net::HTTP.new(url.host, url.port) if url.port == 443 http.use_ssl = true end request = Net::HTTP.const_get(method).new(url.request_uri) request.basic_auth(Payload::api_key, '') if json request.body = json.to_json request.add_field('Content-Type', 'application/json') end response = http.request(request) begin data = JSON.parse(response.body) rescue JSON::ParserError if response.code == '500' raise Payload::InternalError.new else raise Place::UnknownResponse.new end end if response.code == '200' if data['object'] == 'list' return data['values'].map {|obj| Payload::get_cls(obj).new(obj) } else return Payload::get_cls(data).new(data) end else for error in Payload::subclasses(Payload::PayloadError) if error.code != response.code or error.name.split('::')[-1] != data['error_type'] next end raise error.new(data['description'], data) end raise Payload::BadRequest.new(data['description'], data) end end
all()
click to toggle source
# File lib/payload/arm/request.rb, line 34 def all() return self._request('Get') end
create(data)
click to toggle source
# File lib/payload/arm/request.rb, line 57 def create(data) if data.is_a? Array data = data.map do |obj| if obj.kind_of?(ARMObject) if @cls and not obj.instance_of?(@cls) throw "All objects must be of the same type" end @cls = obj.class obj = obj.data end if @cls.poly obj = obj.merge(@cls.poly) end obj end data = { object: 'list', values: data } else if @cls.poly data = data.merge(@cls.poly) end end return self._request('Post', json: data) end
delete(objects)
click to toggle source
# File lib/payload/arm/request.rb, line 51 def delete(objects) deletes = objects.map {|o| o.id }.join('|') return self.filter_by(mode: 'query', id: deletes) ._request('Delete') end
filter_by(*args, **data)
click to toggle source
# File lib/payload/arm/request.rb, line 24 def filter_by(*args, **data) if @cls.poly data = data.merge(@cls.poly) end @filters = @filters.merge(data) return self end
get(id)
click to toggle source
# File lib/payload/arm/request.rb, line 38 def get(id) if id.nil? || id.empty? throw 'id cannot be empty' end return self._request('Get', id: id) end
select(*args, **data)
click to toggle source
# File lib/payload/arm/request.rb, line 16 def select(*args, **data) if @cls.poly data = data.merge(@cls.poly) end return self end
update(**updates)
click to toggle source
# File lib/payload/arm/request.rb, line 46 def update(**updates) return self.filter_by(mode: 'query') ._request('Put', json: updates) end