Module: Pleiades::Command::Routing::NestBlocks

Extended by:
ActiveSupport::Concern
Includes:
RouteRefine
Included in:
Pleiades::Command::Router
Defined in:
lib/pleiades/core/command/routing/nest_blocks.rb

Overview

ブロック付きメソッド郡。

イベントメソッドに渡すキーワード引数を、ネストしたリソースとしてまとめて実行する。

Instance Method Summary collapse

Methods included from RouteRefine

#only_events, #talk_type

Instance Method Details

#_method_Object

コマンドクラスへの呼び出すメソッド名をネストしたリソースに適用する。

EXAMPLE

使用しない

postback scope :hoge, action: :fuga, method: :greet

=> Hoge::Fuga#greet が実行される。

postback scope :hoge, action: :piyo, method: :greet

=> Hoge::Piyo#greet が実行される

使用する

method: :greet do postback scope :hoge, action: :fuga postback scope :hoge, action: :piyo end



118
# File 'lib/pleiades/core/command/routing/nest_blocks.rb', line 118

alias :_method_ method

#action(*actions, &block) ⇒ Object

アクションをネストする。

EXAMPLE

使用しない

postback scope :hoge, action: :piyo postback scope :fuga, action: :piyo

使用する

action :piyo do postback scope :hoge postback scope :fuga end

EXAMPLE(単一リソースのネスト)

使用しない

postback scope :hoge, action: :piyo postback scope :fuga, action: :piyo

使用する

action :piyo do postback scope :hoge postback scope :fuga end

EXAMPLE(複数リソースのネスト)

使用しない

postback scope :piyo, action: :hoge postback scope :piyo, action: :fuga

使用する

action :hoge, :fuga do postback scope: :piyo end



85
86
87
# File 'lib/pleiades/core/command/routing/nest_blocks.rb', line 85

def action(*actions, &block)
  actions.flatten.map { |act| nest_block __method__, act, &block }
end

#concern(*concerns, &block) ⇒ Object

Concernsをネストしたリソースに適用する。

concern HogeModule do postback # => HogeModule が include される concern FugaModule do postback # => HogeModule, FugaModule が include される end end



98
99
100
# File 'lib/pleiades/core/command/routing/nest_blocks.rb', line 98

def concern(*concerns, &block)
  nest_block __method__, concerns, &block
end

#method(method_name, &block) ⇒ Object



119
120
121
122
123
124
125
# File 'lib/pleiades/core/command/routing/nest_blocks.rb', line 119

def method(method_name, &block)
  if block_given?
    nest_block __method__, method_name, &block
  else
    _method_(method_name)
  end
end

#nest_blocks(**keywords, &block) ⇒ Object

複数のネストメソッドを呼び出す。

EXAMPLE

使用しない

scope :hoge do action :fuga do postback end end

使用する

nest_blocks scope: :hoge, action: :fuga do postback end

Parameters:

  • key: (Hash)

    ネストメソッド名, val: 引数



145
146
147
148
149
150
151
152
153
154
155
# File 'lib/pleiades/core/command/routing/nest_blocks.rb', line 145

def nest_blocks(**keywords, &block)
  validate_event_keywords(keywords.deep_dup.merge(type: ''))

  nested_options = make_nested_options(keywords)

  return if nested_options == false

  nested_options.each do |opt|
    nest(@options.deep_dup.merge(opt), &block)
  end
end

#scope(*scopes, &block) ⇒ Object Also known as: scope_append, scope_unshift

スコープをネストする。

メソッド呼び出し時のメソッド名による処理の違い

scope, scope_append 引数を後方追加する

scope_unshift 引数を前方追加する

EXAMPLE(単一リソースのネスト)

使用しない

postback scope :hoge, action: :fuga postback scope :hoge, action: :piyo

使用する

scope :hoge do postback action: :fuga postback action: :piyo end

EXAMPLE(複数リソースのネスト)

使用しない

postback scope :hoge, action: :piyo postback scope :fuga, action: :piyo

使用する

scope :hoge, :fuga do postback action: :piyo end



45
46
47
# File 'lib/pleiades/core/command/routing/nest_blocks.rb', line 45

def scope(*scopes, &block)
  scopes.flatten.map { |scp| nest_block __callee__, scp, &block }
end