Module: CopperEgg::Mixins::Persistence
- Included in:
- CustomDashboard, CopperEgg::MetricGroup, CopperEgg::MetricSample, Tag
- Defined in:
- lib/copperegg/mixins/persistence.rb
Instance Attribute Summary collapse
-
#error ⇒ Object
readonly
Returns the value of attribute error.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
Class Method Summary collapse
Instance Method Summary collapse
Instance Attribute Details
#error ⇒ Object (readonly)
Returns the value of attribute error.
79 80 81 |
# File 'lib/copperegg/mixins/persistence.rb', line 79 def error @error end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
79 80 81 |
# File 'lib/copperegg/mixins/persistence.rb', line 79 def id @id end |
Class Method Details
.included(klass) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/copperegg/mixins/persistence.rb', line 8 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 |
Instance Method Details
#delete ⇒ Object
99 100 101 |
# File 'lib/copperegg/mixins/persistence.rb', line 99 def delete self.class.request(:id => @id, :request_type => "delete") end |
#initialize(attributes = {}) ⇒ Object
81 82 83 |
# File 'lib/copperegg/mixins/persistence.rb', line 81 def initialize(attributes={}) load_attributes(attributes) end |
#persisted? ⇒ Boolean
103 104 105 |
# File 'lib/copperegg/mixins/persistence.rb', line 103 def persisted? !@id.nil? end |
#save ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/copperegg/mixins/persistence.rb', line 85 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 |