class Saasu::Base

Attributes

attributes[R]

Public Class Methods

all() click to toggle source
# File lib/saasu/base.rb, line 9
def self.all
  validate_method_is_implemented_in_saasu_api(:index)

  Saasu::Client.request(:get, resource_url.pluralize).values.first.map do |record|
    self.new(record)
  end
end
create(params) click to toggle source
# File lib/saasu/base.rb, line 78
def self.create(params)
  validate_method_is_implemented_in_saasu_api(:create)

  id = Saasu::Client.request(:post, resource_url, params).values.first
  new(Saasu::Client.request(:get, resource_url(id)))
end
delete(id) click to toggle source
# File lib/saasu/base.rb, line 49
def self.delete(id)
  validate_method_is_implemented_in_saasu_api(:destroy)

  Saasu::Client.request(:delete, resource_url(id))
end
find(id) click to toggle source
# File lib/saasu/base.rb, line 17
def self.find(id)
  validate_method_is_implemented_in_saasu_api(:show)

  response = Saasu::Client.request(:get, resource_url(id))

  if response.present?
    self.new(response)
  else
    response.body
  end
end
new(params = {}) click to toggle source
# File lib/saasu/base.rb, line 5
def initialize(params = {})
  @attributes = params.deep_stringify_keys
end
validate_method_is_implemented_in_saasu_api(method_name) click to toggle source
# File lib/saasu/base.rb, line 89
def self.validate_method_is_implemented_in_saasu_api(method_name)
  raise "This method is not currently supported by Saasu API" unless @api_methods.include?(method_name)
end
where(params) click to toggle source
# File lib/saasu/base.rb, line 29
def self.where(params)
  validate_method_is_implemented_in_saasu_api(:index)
  validate_filters(params)

  Saasu::Client.request(:get, resource_url.pluralize, params).values.first.map do |record|
    self.new(record)
  end
end

Protected Class Methods

allowed_methods(*params) click to toggle source
# File lib/saasu/base.rb, line 128
def self.allowed_methods(*params)
  @api_methods = params
end
filter_by(params) click to toggle source
# File lib/saasu/base.rb, line 132
def self.filter_by(params)
  @filters = params
end
resource_url(id = nil) click to toggle source
# File lib/saasu/base.rb, line 136
def self.resource_url(id = nil)
  [name.demodulize.downcase, id].compact.join('/')
end
validate_filters(params) click to toggle source
# File lib/saasu/base.rb, line 140
def self.validate_filters(params)
  params.keys.each do |key|
    raise "Filter not supported by Saasu API: #{key}. Supported filters: #{@filters.join(", ")}" unless key.to_s.in?(@filters)
  end
end

Public Instance Methods

[](key) click to toggle source
# File lib/saasu/base.rb, line 93
def [](key)
  @attributes[key.to_s]
end
[]=(key, value) click to toggle source
# File lib/saasu/base.rb, line 97
def []=(key, value)
  @attributes[key.to_s] = value
end
delete() click to toggle source
# File lib/saasu/base.rb, line 38
def delete
  validate_method_is_implemented_in_saasu_api(:destroy)

  if Saasu::Client.request(:delete, self.class.resource_url(id))["StatusMessage"] == "Ok"
    self['Id'] = nil
    true
  else
    false
  end
end
id() click to toggle source
# File lib/saasu/base.rb, line 115
def id
  @attributes['Id']
end
method_missing(meth, *args, &cb) click to toggle source
Calls superclass method
# File lib/saasu/base.rb, line 101
def method_missing meth, *args, &cb
  if meth.in?(getter_methods)
    @attributes[meth.to_s.classify]
  elsif meth.in?(setter_methods)
    @attributes[meth.to_s.gsub('=','').classify] = args.flatten.compact.first
  else
    super meth, *args, &cb
  end
end
save() click to toggle source
# File lib/saasu/base.rb, line 55
def save
  if self.id.present?
    validate_method_is_implemented_in_saasu_api(:update)
    Saasu::Client.request(:put, self.class.resource_url(id), @attributes)
  else
    validate_method_is_implemented_in_saasu_api(:create)
    self['Id'] = Saasu::Client.request(:post, self.class.resource_url, @attributes).values.first
  end

  @attributes = Saasu::Client.request(:get, self.class.resource_url(id))
  true
end
to_s() click to toggle source
# File lib/saasu/base.rb, line 111
def to_s
  "#{self.class.name.demodulize} ##{self.id}"
end
update(params) click to toggle source
# File lib/saasu/base.rb, line 68
def update(params)
  validate_method_is_implemented_in_saasu_api(:update)

  params.each do |key, value|
    self[key] = value
  end

  save
end
validate_method_is_implemented_in_saasu_api(method_name) click to toggle source
# File lib/saasu/base.rb, line 85
def validate_method_is_implemented_in_saasu_api(method_name)
  self.class.validate_method_is_implemented_in_saasu_api(method_name)
end

Protected Instance Methods

getter_methods() click to toggle source
# File lib/saasu/base.rb, line 120
def getter_methods
  @attributes.keys.map { |k| k.underscore.to_sym }
end
setter_methods() click to toggle source
# File lib/saasu/base.rb, line 124
def setter_methods
  @attributes.keys.map { |k| "#{k.underscore}=".to_sym }
end