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