module Copperegg::Revealmetrics::Mixins::Persistence
Attributes
resource_name[R]
error[R]
id[R]
Public Class Methods
create(params)
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 31 def create(params) params.delete(:id) params.delete("id") new(params).save end
delete(id)
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 37 def delete(id) request(:id => id, :request_type => "delete") end
find(*args)
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 17 def find(*args) params = args.last.class == Hash ? args.pop : {} id = args.first response = request(params.merge(:request_type => "get", :id => id)) if response.code == "200" json = JSON.parse(response.body) if json.is_a?(Array) json.map { |attributes| new(attributes) } else new(json) end end end
included(klass)
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 12 def self.included(klass) klass.class_eval do class << self attr_reader :resource_name def find(*args) params = args.last.class == Hash ? args.pop : {} id = args.first response = request(params.merge(:request_type => "get", :id => id)) if response.code == "200" json = JSON.parse(response.body) if json.is_a?(Array) json.map { |attributes| new(attributes) } else new(json) end end end def create(params) params.delete(:id) params.delete("id") new(params).save end def delete(id) request(:id => id, :request_type => "delete") end def request(params={}) request_type = params.delete(:request_type) raise "invalid type `#{request_type}`" if !%w(get post put delete).include?(request_type) id = params.delete(:id) uri = id ? URI.parse("#{Api.uri}/#{self.resource_name}/#{id}.json") : URI.parse("#{Api.uri}/#{self.resource_name}.json") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' http.verify_mode = OpenSSL::SSL::VERIFY_NONE if !Api.ssl_verify_peer request = Net::HTTP.const_get(request_type.capitalize).new(uri.request_uri) request.body = JSON.generate(params) unless params.empty? request.basic_auth(Api.apikey, "U") request["Content-Type"] = "application/json" begin response = http.request(request) rescue Exception => e raise e end response end def request_200(params={}) response = request(params) unless response.code === "200" raise HttpError.new("HTTP request failed with code `#{response.code}`: `#{response.body}`") end response end private def resource(value) @resource_name = value end end end end
new(attributes={})
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 85 def initialize(attributes={}) load_attributes(attributes) end
request(params={})
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 41 def request(params={}) request_type = params.delete(:request_type) raise "invalid type `#{request_type}`" if !%w(get post put delete).include?(request_type) id = params.delete(:id) uri = id ? URI.parse("#{Api.uri}/#{self.resource_name}/#{id}.json") : URI.parse("#{Api.uri}/#{self.resource_name}.json") http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.scheme == 'https' http.verify_mode = OpenSSL::SSL::VERIFY_NONE if !Api.ssl_verify_peer request = Net::HTTP.const_get(request_type.capitalize).new(uri.request_uri) request.body = JSON.generate(params) unless params.empty? request.basic_auth(Api.apikey, "U") request["Content-Type"] = "application/json" begin response = http.request(request) rescue Exception => e raise e end response end
request_200(params={})
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 66 def request_200(params={}) response = request(params) unless response.code === "200" raise HttpError.new("HTTP request failed with code `#{response.code}`: `#{response.body}`") end response end
Private Class Methods
resource(value)
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 76 def resource(value) @resource_name = value end
Public Instance Methods
delete()
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 103 def delete self.class.request(:id => @id, :request_type => "delete") end
persisted?()
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 107 def persisted? !@id.nil? end
save()
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 89 def save if valid? response = persisted? ? update : create attributes = JSON.parse(response.body) if response.code != "200" @error = attributes.merge("code" => response.code) else load_attributes(attributes) end else raise ValidationError.new(@error) end end
Private Instance Methods
create()
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 113 def create self.class.request(to_hash.merge(:request_type => "post")) end
update()
click to toggle source
# File lib/copperegg/revealmetrics/mixins/persistence.rb, line 117 def update self.class.request(to_hash.merge(:id => @id, :request_type => "put")) end