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