Module: Kabk

Defined in:
lib/kabk.rb,
lib/kabk/field.rb,
lib/kabk/errors.rb,
lib/kabk/version.rb,
lib/kabk/registry.rb,
lib/kabk/resource.rb,
lib/kabk/validator.rb,
lib/kabk/concurrency.rb,
lib/kabk/rest_engine.rb,
lib/kabk/adapters/base.rb,
lib/kabk/query_builder.rb,
lib/kabk/export_handler.rb,
lib/kabk/upload_handler.rb,
lib/kabk/schema_renderer.rb,
lib/kabk/resource_builder.rb,
lib/kabk/relation_hydrator.rb,
lib/kabk/adapters/sequel_adapter.rb

Overview

Kabk module namespace

Defined Under Namespace

Modules: Adapters Classes: ApiError, Concurrency, ConcurrencyConflictError, Error, ExportHandler, Field, ForbiddenError, InvalidFieldError, InvalidOldPasswordError, NotFoundError, QueryBuilder, Registry, RelationHydrator, Resource, ResourceBuilder, RestEngine, SchemaRenderer, UnauthorizedError, UploadHandler, ValidationError, Validator

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.register(name:, table:, adapter: nil) { ... } ⇒ Object

Register a new model as a resource

Parameters:

  • name (String, Symbol)

    The unique identifier for the resource

  • table (Class)

    The Model class (e.g. Sequel::Model)

  • adapter (Kabk::Adapters::Base) (defaults to: nil)

    Optional explicit adapter instance

Yields:

  • Block evaluated in the context of a ResourceBuilder



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/kabk.rb', line 28

def self.register(name:, table:, adapter: nil, &block)
  resource = Resource.new(name: name, model_class: table)
  builder = ResourceBuilder.new(resource)
  builder.instance_eval(&block) if block_given?

  # Fallbacks per protocol
  resource.plural_name ||= "#{name}s"
  resource.title ||= resource.plural_name.capitalize
  resource.icon ||= "Database"
  resource.api_path ||= "/api/admin/#{resource.plural_name}"

  # Determine and assign adapter
  if adapter
    resource.adapter = adapter
  elsif defined?(Sequel::Model) && table < Sequel::Model
    resource.adapter = Adapters::SequelAdapter.new(resource)
  else
    raise ArgumentError, "Could not determine appropriate adapter for #{table}. Please provide an explicit adapter."
  end

  Registry.instance.register(resource)
  resource
end