class SBF::Client::TopLevelEntity

Constants

DEFAULT_CLASS_ACTIONS
DEFAULT_CRUD_ACTIONS
DEFAULT_ENDPOINT
DEFAULT_INSTANCE_ACTIONS

Public Class Methods

_endpoint() click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 28
def _endpoint
  DEFAULT_ENDPOINT.new(self)
end
action(name) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 60
def action(name)
  instance_action(name) if %i(save create).include?(name)

  if name == :update
    define_method(name) do |*args|
      result = endpoint.update(id, self, *args)
      result unless result.is_a?(SBF::Client::TopLevelEntity)
      result.errors? ? false : result
    end
  end

  if name == :delete
    define_method(:delete) do |*_args|
      response = endpoint.delete(id)
      if response.error?
        add_errors(response.error)
        errors.instance_variable_set(:@http_code, response.http_code)
        false
      else
        @destroyed = true
        freeze
      end
    end
  end

  class_action(name)
end
actions(actions) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 40
def actions(actions)
  actions.each { |m| action(m) }
end
blacklist_action(name) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 88
def blacklist_action(name)
  define_method(name) do |*_|
    raise NoMethodError.new("#{name} is blacklisted", name)
  end

  singleton_class.class_eval do
    define_method(name) do |*_|
      raise NoMethodError.new("#{name} is blacklisted", name)
    end
  end
end
class_action(name) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 52
def class_action(name)
  singleton_class.class_eval do
    define_method(name) do |*args|
      endpoint.send(name, *args)
    end
  end
end
define_endpoint(mod, options) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 32
def define_endpoint(mod, options)
  singleton_class.class_eval do
    define_method(:_endpoint) do
      @_endpoint ||= mod.new(options.fetch(:target_class, self))
    end
  end
end
endpoint(mod = nil, options = {}) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 22
def endpoint(mod = nil, options = {})
  return define_endpoint(mod, options) if mod

  _endpoint
end
instance_action(name) click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 44
def instance_action(name)
  define_method(name) do |*args|
    result = endpoint.send(name, self, *args)
    result unless result.is_a?(SBF::Client::TopLevelEntity)
    %i(save create).include?(name) && result.errors? ? false : result
  end
end

Public Instance Methods

endpoint() click to toggle source
# File lib/stbaldricks/entities/lib/top_level.rb, line 107
def endpoint
  self.class.endpoint
end