Module: ROM::Command::ClassInterface

Included in:
ROM::Command
Defined in:
core/lib/rom/commands/class_interface.rb

Instance Method Summary collapse

Instance Method Details

#[](adapter) ⇒ Class

Return adapter specific sub-class based on the adapter identifier

This is a syntax sugar to make things consistent

Examples:

ROM::Commands::Create[:memory]
# => ROM::Memory::Commands::Create

Parameters:

  • adapter (Symbol)

    identifier

Returns:

  • (Class)


43
44
45
# File 'core/lib/rom/commands/class_interface.rb', line 43

def [](adapter)
  adapter_namespace(adapter).const_get(Inflector.demodulize(name))
end

#after(hook) ⇒ Array<Hash, Symbol> #after(hook_opts) ⇒ Array<Hash, Symbol>

Set after-execute hooks

Overloads:

  • #after(hook) ⇒ Array<Hash, Symbol>

    Set an after hook as a method name

    Examples:

    class CreateUser < ROM::Commands::Create[:sql]
      relation :users
      register_as :create
    
      after :my_hook
    
      def my_hook(tuple, *)
        puts "hook called#
      end
    end
  • #after(hook_opts) ⇒ Array<Hash, Symbol>

    Set an after hook as a method name with arguments

    Examples:

    class CreateUser < ROM::Commands::Create[:sql]
      relation :users
      register_as :create
    
      after my_hook: { arg1: 1, arg1: 2 }
    
      def my_hook(tuple, arg1:, arg2:)
        puts "hook called with args: #{arg1} and #{arg2}"
      end
    end

    Parameters:

    • hook (Hash<Symbol=>Hash>)

      Options with method name and pre-set args

Returns:

  • (Array<Hash, Symbol>)

    A list of all configured after hooks



211
212
213
214
215
216
217
# File 'core/lib/rom/commands/class_interface.rb', line 211

def after(*hooks)
  if !hooks.empty?
    set_hooks(:after, hooks)
  else
    @after
  end
end

#before(hook) ⇒ Array<Hash, Symbol> #before(hook_opts) ⇒ Array<Hash, Symbol>

Set before-execute hooks

Overloads:

  • #before(hook) ⇒ Array<Hash, Symbol>

    Set an before hook as a method name

    Examples:

    class CreateUser < ROM::Commands::Create[:sql]
      relation :users
      register_as :create
    
      before :my_hook
    
      def my_hook(tuple, *)
        puts "hook called#
      end
    end
  • #before(hook_opts) ⇒ Array<Hash, Symbol>

    Set an before hook as a method name with arguments

    Examples:

    class CreateUser < ROM::Commands::Create[:sql]
      relation :users
      register_as :create
    
      before my_hook: { arg1: 1, arg2: 2 }
    
      def my_hook(tuple, arg1:, arg2:)
        puts "hook called with args: #{arg1} and #{arg2}"
      end
    end

    Parameters:

    • hook (Hash<Symbol=>Hash>)

      Options with method name and pre-set args

Returns:

  • (Array<Hash, Symbol>)

    A list of all configured before hooks



166
167
168
169
170
171
172
# File 'core/lib/rom/commands/class_interface.rb', line 166

def before(*hooks)
  if !hooks.empty?
    set_hooks(:before, hooks)
  else
    @before
  end
end

#build(relation, **options) ⇒ Command

Build a command class for a specific relation with options

Examples:

class CreateUser < ROM::Commands::Create[:memory]
end

command = CreateUser.build(rom.relations[:users])

Parameters:

Returns:



74
75
76
# File 'core/lib/rom/commands/class_interface.rb', line 74

def build(relation, **options)
  new(relation, **self.options, **options)
end

#create_class(name, type) {|Class| ... } ⇒ Class, Object

Create a command class with a specific type

Parameters:

  • name (Symbol)

    Command name

  • type (Class)

    Command class

Yields:

  • (Class)

Returns:

  • (Class, Object)


88
89
90
91
92
93
94
95
96
97
98
# File 'core/lib/rom/commands/class_interface.rb', line 88

def create_class(name, type, &block)
  klass = Dry::Core::ClassBuilder
    .new(name: "#{Inflector.classify(type)}[:#{name}]", parent: type)
    .call

  if block
    yield(klass)
  else
    klass
  end
end

#extend_for_relation(relation) ⇒ Class

Extend a command class with relation view methods

Parameters:

Returns:

  • (Class)


125
126
127
# File 'core/lib/rom/commands/class_interface.rb', line 125

def extend_for_relation(relation)
  include(relation_methods_mod(relation.class))
end

#use(plugin, **options) ⇒ Object

Use a configured plugin in this relation

Examples:

class CreateUser < ROM::Commands::Create[:memory]
  use :pagintion

  per_page 30
end

Parameters:

  • plugin (Symbol)
  • options (Hash)

Options Hash (**options):

  • :adapter (Symbol) — default: :default

    first adapter to check for plugin



114
115
116
# File 'core/lib/rom/commands/class_interface.rb', line 114

def use(plugin, **options)
  ROM.plugin_registry[:command].fetch(plugin, adapter).apply_to(self, **options)
end