class Hanami::Extensions::DB::SliceConfiguredRepo

@api private @since 2.2.0

Attributes

slice[R]

Public Class Methods

new(slice) click to toggle source
Calls superclass method
# File lib/hanami/extensions/db/repo.rb, line 34
def initialize(slice)
  super()
  @slice = slice
end

Public Instance Methods

extended(repo_class) click to toggle source
# File lib/hanami/extensions/db/repo.rb, line 39
def extended(repo_class)
  define_inherited
  configure_repo(repo_class)
  define_new
end
inspect() click to toggle source
# File lib/hanami/extensions/db/repo.rb, line 45
def inspect
  "#<#{self.class.name}[#{slice.name}]>"
end

Private Instance Methods

configure_repo(repo_class) click to toggle source
# File lib/hanami/extensions/db/repo.rb, line 64
def configure_repo(repo_class)
  repo_class.struct_namespace struct_namespace
end
define_inherited() click to toggle source
Calls superclass method
# File lib/hanami/extensions/db/repo.rb, line 51
def define_inherited
  root_for_repo_class = method(:root_for_repo_class)

  define_method(:inherited) do |subclass|
    super(subclass)

    unless subclass.root
      root = root_for_repo_class.(subclass)
      subclass.root root if root
    end
  end
end
define_new() click to toggle source
Calls superclass method
# File lib/hanami/extensions/db/repo.rb, line 68
def define_new
  resolve_rom = method(:resolve_rom)

  define_method(:new) do |**kwargs|
    super(container: kwargs.fetch(:container) { resolve_rom.() })
  end
end
resolve_rom() click to toggle source
# File lib/hanami/extensions/db/repo.rb, line 76
def resolve_rom
  slice["db.rom"]
end
root_for_repo_class(repo_class) click to toggle source
# File lib/hanami/extensions/db/repo.rb, line 80
def root_for_repo_class(repo_class)
  return unless repo_class.to_s.end_with?("Repo")

  slice.inflector.demodulize(repo_class)
    .then { slice.inflector.underscore(_1) }
    .then { _1.gsub(/_repo$/, "") }
    .then { slice.inflector.pluralize(_1) }
    .then { _1.to_sym }
end
struct_namespace() click to toggle source
# File lib/hanami/extensions/db/repo.rb, line 90
def struct_namespace
  @struct_namespace ||=
    if slice.namespace.const_defined?(:Structs)
      slice.namespace.const_get(:Structs)
    else
      slice.namespace.const_set(:Structs, Module.new)
    end
end