class Nube::Base
Attributes
attributes[RW]
attrs_changed[RW]
errors[RW]
new_record[R]
new_record?[R]
Public Class Methods
do_request(method, site_options, params={})
click to toggle source
# File lib/nube/base.rb, line 100 def self.do_request(method, site_options, params={}) site = site(site_options[:identity], self.name.split('::').last.pluralize.underscore, site_options[:action], site_options[:id]) url = URI.parse(site) req = "Net::HTTP::#{method.to_s.camelize}".constantize.new(url.to_s) req.body = params.to_param req['Authorization'] = "Token token=#{token(site_options[:identity])}" res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } if (res.code == "200") [res.body.blank? ? {} : JSON.parse(res.body, quirks_mode: true)].flatten.compact else raise res.msg + res.code end end
enum(options)
click to toggle source
alias_method :persisted?, :new_record?
# File lib/nube/base.rb, line 90 def self.enum(options) options.each do |attr, values| values.each do |value| define_method "#{value}?" do self.send(attr) == value.to_s end end end end
inherited(subclass)
click to toggle source
# File lib/nube/base.rb, line 14 def self.inherited(subclass) subclass.include(Site) subclass.include(RemoteScope) subclass.include(RemoteAssociation) end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/nube/base.rb, line 130 def self.method_missing(name, *args, &block) super(name, *args) unless ("#{self.name}Relation".constantize.instance_methods - self.instance_methods).include?(name) args.empty? ? self.node.send(name) : self.node.send(name, *args) end
new(attrs={})
click to toggle source
# File lib/nube/base.rb, line 20 def initialize attrs={}, new_record=true @new_record = new_record @attrs_changed = {} @errors = {} @attributes = (attrs.empty? ? self.class.empty_attributes : attrs).stringify_keys end
Public Instance Methods
destroy()
click to toggle source
# File lib/nube/base.rb, line 48 def destroy self.class.destroy_all(id: id).first unless id.nil? end
identity()
click to toggle source
# File lib/nube/base.rb, line 58 def identity _identity = nil _identity = if defined?(IDENTITY_ATTR) send(IDENTITY_ATTR) elsif defined?(IDENTITY_SITE) IDENTITY_SITE end _identity.nil? ? {} : { identity: _identity } end
inspect()
click to toggle source
# File lib/nube/base.rb, line 68 def inspect "#<#{self.class.name} " + attributes.keys.map{|attr| "#{attr}: #{attributes[attr].inspect}" }.join(', ') + '>' end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/nube/base.rb, line 114 def method_missing(name, *args, &block) name = name.to_s setter = name.end_with?('=') name = name[0..-2] if setter if @attributes.has_key?(name) if setter @attributes[name] = args[0] @attrs_changed[name] = args[0] else @attributes[name] end else super end end
save(params={})
click to toggle source
# File lib/nube/base.rb, line 27 def save(params={}) if new_record? remote_obj = self.class.post(identity.merge(params), { attributes: @attributes } ).first @attributes = remote_obj["object"] @errors = remote_obj["errors"] @new_record = false if @errors.empty? else @errors = self.class.put(identity.merge(params.merge(id: id)), { attributes: @attrs_changed, id: id } ).first end @errors.empty? end
update_attribute(attr, value)
click to toggle source
# File lib/nube/base.rb, line 44 def update_attribute(attr, value) update_attributes(attr => value) end
update_attributes(attrs={})
click to toggle source
# File lib/nube/base.rb, line 39 def update_attributes(attrs={}) @attrs_changed.merge!(attrs) save end