class Bitodeme::Resource::Base

Base class for all Bitodeme resources

Public Class Methods

new(attrs:, params:) click to toggle source
# File lib/bitodeme/resources/base.rb, line 54
def initialize(attrs:, params:)
  attrs.each do |attr|
    val = params.fetch(attr.to_s, params.fetch(attr, nil))
    instance_variable_set("@#{attr}", val)
  end
end

Private Class Methods

_all(collection, opts) click to toggle source
# File lib/bitodeme/resources/base.rb, line 19
def _all(collection, opts)
  items = get("/api/v1/#{collection}", _query_params(opts)).body
  items.fetch(collection, []).map { |item| new(item) }
end
_create(collection, resource, data) click to toggle source
# File lib/bitodeme/resources/base.rb, line 24
def _create(collection, resource, data)
  item = post("/api/v1/#{collection}", data).body.fetch(resource, data)
  new(item)
end
_find(collection, resource, id) click to toggle source
# File lib/bitodeme/resources/base.rb, line 14
def _find(collection, resource, id)
  item = get("/api/v1/#{collection}/#{id}").body.fetch(resource, {})
  new(item)
end
_query_params(opts) click to toggle source
# File lib/bitodeme/resources/base.rb, line 29
def _query_params(opts)
  query_params = {
    page:     opts.fetch(:page, 1),
    per_page: opts.fetch(:per_page, 50),
    since:    opts.fetch(:since, 0)
  }
  query_params[:starts_at] = opts[:starts_at] if opts.key?(:starts_at)
  query_params[:ends_at]   = opts[:ends_at]   if opts.key?(:ends_at)
  query_params
end
conn() click to toggle source
# File lib/bitodeme/resources/base.rb, line 40
def conn
  Bitodeme::Conn.build
end

Public Instance Methods

to_h() click to toggle source
# File lib/bitodeme/resources/base.rb, line 45
def to_h
  attrs.each_with_object({}) do |attr, hash|
    val        = instance_variable_get(:"@#{attr}")
    hash[attr] = val unless val.nil?
  end
end

Private Instance Methods

attrs() click to toggle source
# File lib/bitodeme/resources/base.rb, line 61
def attrs
  methods - klass_methods - excluded_attrs
end
excluded_attrs() click to toggle source
# File lib/bitodeme/resources/base.rb, line 69
def excluded_attrs
  %i[to_h validate]
end
klass_methods() click to toggle source
# File lib/bitodeme/resources/base.rb, line 65
def klass_methods
  self.class.methods - %i[name]
end
raise_for(attr) click to toggle source
# File lib/bitodeme/resources/base.rb, line 73
def raise_for(attr)
  raise Bitodeme::ValidationError.new(attr, send(:"#{attr}"))
end