모듈: Mongoid::Interceptable

확장자:
ActiveSupport::Concern
포함 항목:
컴포저블
다음에 정의됨:
lib/mongoid/interceptable.rb

개요

이 모듈에는 Mongoid에 대한 모든 콜백 후크가 포함되어 있습니다.

상수 요약 접기

콜백 =
[
  :after_build,
  :after_create,
  :after_destory,
  :after_find,
  :after_initialize,
  :after_save,
  :after_터치,
  :after_update,
  :after_upsert,
  :after_validation,
  :round_create,
  :round_destory,
  :round_save,
  :round_update,
  :round_upsert,
  :before_create,
  :before_destory,
  :before_save,
  :before_update,
  :before_upsert,
  :before_validation,
].동결

인스턴스 메서드 요약 접기

인스턴스 메서드 세부 정보

#_mongoid_run_child_after_callbacks(callback_list: []) ⇒ 객체

애프터 콜백을 실행합니다.

매개변수:

  • 콜백 목록 (Array<ActiveSupport::Callbacks::CallbackSequence, ActiveSupport::Callbacks::Filters::Environment>) (기본값: [])

    콜백 시퀀스 및 환경 쌍의 목록입니다.

[소스 보기]

250
251
252
253
254
255
# 파일 'lib/mongoid/interceptable.rb', 250줄

def _mongoid_run_child_after_callbacks(콜백 목록: [])
  콜백 목록.reverse_each do |Next_sequence, env|
    Next_sequence.invoke_after(env)
    반환 거짓 만약 env.중단됨
  end
end

#_mongoid_run_child_before_callbacks( 종류, 자식: [], 콜백 목록: []) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

내장된 문서에 대해 지정된 종류의 이전 콜백을 실행합니다.

매개변수:

  • kind (기호)

    실행할 콜백 유형입니다.

  • 어린이 (Array<Document>) (기본값: [])

    콜백을 실행할 하위 항목입니다.

  • 콜백 목록 (Array<ActiveSupport::Callbacks::CallbackSequence, ActiveSupport::Callbacks::Filters::Environment>) (기본값: [])

    콜백 시퀀스 및 환경 쌍의 목록입니다. 이 목록은 나중에 콜백 후 역순으로 실행하는 데 사용됩니다.

[소스 보기]

229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# 파일 'lib/mongoid/interceptable.rb', 229줄

def _mongoid_run_child_before_callbacks(kind, 자식: [], 콜백 목록: [])
  어린이. do |자식|
    체인 = 자식.__콜백[Child_callback_type(kind, 자식)]
    env = ActiveSupport::콜백::필터::환경.신규(자식, 거짓, nil)
    Next_sequence = compile_callbacks(체인)
    하지 않는 한 Next_sequence.final?
      몽고이드.로거.경고("내장된 문서에는 어라운드 콜백이 비활성화되어 있습니다.#{자식.클래스.이름}대한 콜백 어라운드 건너뛰기")
      몽고이드.로거.경고("내장된 문서에 대한 어라운드 콜백을 활성화 하려면 Mongoid::Config.round_callbacks_for_embeds를 true로 설정하다 하세요.")
    end
    Next_sequence.invoke_before(env)
    반환 거짓 만약 env.중단됨
    env.value = !env.중단됨
    콜백 목록 << [Next_sequence, env]
  end
  콜백 목록
end

#_mongoid_run_child_callbacks(type, 하위: nil, &block) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

내장된 문서에 대한 콜백을 실행합니다.

매개변수:

  • kind (기호)

    실행할 콜백 유형입니다.

  • 어린이 (Array<Document>) (기본값: nil)

    콜백을 실행할 하위 항목입니다. nil이면 문서의 계단식 배열 가능한 모든 하위 항목에 대해 콜백이 실행됩니다.

[소스 보기]

153
154
155
156
157
158
159
160
161
162
163
# 파일 'lib/mongoid/interceptable.rb', 153줄

def _mongoid_run_child_callbacks(kind, 자식: nil, &차단)
  만약 몽고이드::Config.round_callbacks_for_embeds
    _mongoid_run_child_callbacks_with_round(kind,
                                             자식: 어린이,
                                             &차단)
  other
    _mongoid_run_child_callbacks_without_round(kind,
                                                자식: 어린이,
                                                &차단)
  end
end

#_mongoid_run_child_callbacks_with_round( 종류, 자식: nil, &block) ⇒ 객체

어라운드 콜백을 포함하여 내장된 문서에 대해 지정된 종류의 콜백을 실행합니다.

매개변수:

  • kind (기호)

    실행할 콜백 유형입니다.

  • 어린이 (Array<Document>) (기본값: nil)

    콜백을 실행할 하위 항목입니다. nil이면 문서의 계단식 배열 가능한 모든 하위 항목에 대해 콜백이 실행됩니다.

    @api private

[소스 보기]

174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# 파일 'lib/mongoid/interceptable.rb', 174줄

def _mongoid_run_child_callbacks_with_round(kind, 자식: nil, &차단)
  어린이 = (어린이 || cascadeable_children(kind))
  with_children = !몽고이드::Config.explain_multiple_calls_of_embedded_callbacks

  반환 차단&.전화하기. 만약 어린이.비어 있나요?

  섬유 = 어린이.map do |자식|
    파이버.신규 do
      자식.run_callbacks(Child_callback_type(kind, 자식), with_children: with_children) do
        파이버.yield
      end
    end
  end

  섬유. do |파이버|
    파이버.재개
    올리다 몽고이드::오류::InvalidAroundCallback 하지 않는 한 파이버.alive?
  end

  차단&.전화하기.

  섬유.reverse.(&:resume)
end

#_mongoid_run_child_callbacks_without_round( 종류, 자식: nil, &block) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

주변 콜백 없이 내장된 문서에 대해 지정된 종류의 콜백을 실행합니다.

매개변수:

  • kind (기호)

    실행할 콜백 유형입니다.

  • 어린이 (Array<Document>) (기본값: nil)

    콜백을 실행할 하위 항목입니다. nil이면 문서의 계단식 배열 가능한 모든 하위 항목에 대해 콜백이 실행됩니다.

[소스 보기]

207
208
209
210
211
212
213
214
215
216
217
218
# 파일 'lib/mongoid/interceptable.rb', 207줄

def _mongoid_run_child_callbacks_without_round(kind, 자식: nil, &차단)
  어린이 = (어린이 || cascadeable_children(kind))
  콜백 목록 = _mongoid_run_child_before_callbacks(kind, 자식: 어린이)
  반환 거짓 만약 콜백 목록 == 거짓
  value = 차단&.전화하기.
  콜백 목록. do |_next_sequence, env|
    env.value &&= value
  end
  반환 거짓 만약 _mongoid_run_child_after_callbacks(콜백 목록: 콜백 목록) == 거짓

  value
end

#콜백_실행 파일?(type) ⇒ true | false

이 문서 에서 제공된 유형의 콜백 을 실행할 수 있나요?

예시:

콜백 을 실행할 수 있나요?

document.callback_executable?(:save)

매개변수:

  • kind (기호)

    콜백 의 유형입니다.

반환합니다:

  • (true | false)

    콜백을 실행할 수 있는 경우.

[소스 보기]

62
63
64
# 파일 'lib/mongoid/interceptable.rb', 62줄

def 콜백 실행 가능?(kind)
  response_to?("_#{종류}_callbacks")
end

#in_callback_state?(type) ⇒ true | false

문서 가 현재 잠재적으로 콜백을 실행해야 할 수 있는 상태 인가요?

예시:

문서 가 콜백 상태 인가요?

document.in_callback_state?(:update)

매개변수:

  • kind (기호)

    콜백 종류입니다.

반환합니다:

  • (true | false)

    문서 가 콜백 상태 인 경우.

[소스 보기]

75
76
77
# 파일 'lib/mongoid/interceptable.rb', 75줄

def in_callback_state?(kind)
  [ :create, :destory ].포함?(kind) || new_record? || 플래그가 지정된_포_파괴? || 변경되었나요?
end

#Pending_callbacksArray<Symbol>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

나중에 실행되도록 저장된 콜백을 반환합니다.

반환합니다:

  • (Array<Symbol>)

    저장된 보류 중인 콜백의 메서드 기호입니다.

[소스 보기]

262
263
264
# 파일 'lib/mongoid/interceptable.rb', 262줄

def 보류 중인_콜백
  @pending_callbacks ||= [].to_set
end

#Pending_callbacks=(value) ⇒ Array<Symbol>

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

나중에 실행할 콜백을 저장합니다. 이에 대한 좋은 사용 사례 는 문서 에 연결이 설정하다 될 때까지 after_find 및 after_initialize 콜백을 지연하는 것입니다. 문서 에 기본값 적용을 지연하는 데에도 사용할 수 있습니다.

매개변수:

  • value (Array<Symbol>)

    저장 보류 중인 콜백의 메서드 기호입니다.

반환합니다:

  • (Array<Symbol>)

    저장된 보류 중인 콜백의 메서드 기호입니다.

[소스 보기]

276
277
278
# 파일 'lib/mongoid/interceptable.rb', 276줄

def 보류 중인_콜백=(value)
  @pending_callbacks = value
end

#run_after_callbacks(* Kinds) ⇒ 객체

참고:

ActiveSupport는 기본적으로 이러한 유형의 동작을 허용하지 않으므로 Mongoid는 이를 우회하여 자체적으로 구현해야 합니다.

특정 이벤트 에 대한 사후 콜백만 실행합니다.

예시:

저장 후 콜백만 실행합니다.

model.run_after_callbacks(:save)

매개변수:

  • *kinds (기호...)

    발생 중인 이벤트입니다.

반환합니다:

  • (객체)

    체인 실행 결과입니다.

[소스 보기]

90
91
92
93
94
# 파일 'lib/mongoid/interceptable.rb', 90줄

def run_after_callbacks(*kinds)
  kinds. do |kind|
    run_targeted_callbacks(:after, kind)
  end
end

#run_before_callbacks(* Kinds) ⇒ 객체

참고:

ActiveSupport는 기본적으로 이러한 유형의 동작을 허용하지 않으므로 Mongoid는 이를 우회하여 자체적으로 구현해야 합니다.

특정 이벤트 에 대한 이전 콜백만 실행합니다.

예시:

저장 전 콜백만 실행합니다.

model.run_before_callbacks(:save, :create)

매개변수:

  • *kinds (기호...)

    발생 중인 이벤트입니다.

반환합니다:

  • (객체)

    체인 실행 결과입니다.

[소스 보기]

107
108
109
110
111
# 파일 'lib/mongoid/interceptable.rb', 107줄

def run_before_callbacks(*kinds)
  kinds. do |kind|
    run_targeted_callbacks(:before, kind)
  end
end

#run_callbacks( Kind, with_children: true, skip_if: nil, &block) ⇒ 객체

문서에 대한 콜백을 실행합니다. 이는 플래그가 지정된 내장된 문서에 콜백을 계단식으로 호출하는 활성 지원의 기능을 재정의합니다.

예시:

콜백을 실행합니다.

run_callbacks :save do
  save!
end

매개변수:

  • kind (기호)

    실행할 콜백 유형입니다.

  • with_children (true | false) (기본값: true)

    플래그는 내장된 문서 의 콜백을 실행 할지 여부를 지정합니다.

  • skip_if (Proc | nil) (기본값: nil)

    이 proc이 true를 반환하면 콜백이 트리거되지 않고 지정된 차단 은 계속 호출됩니다.

[소스 보기]

127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# 파일 'lib/mongoid/interceptable.rb', 127줄

def run_callbacks(kind, with_children: true, skip_if: nil, &차단)
  만약 skip_if&.전화하기.
    반환 차단&.전화하기.
  end
  만약 with_children
    cascadeable_children(kind). do |자식|
      만약 자식.run_callbacks(Child_callback_type(kind, 자식), with_children: with_children) == 거짓
        반환 거짓
      end
    end
  end
  만약 콜백 실행 가능?(kind)
    super(kind, &차단)
  other
    true
  end
end

#run_pending_callbacks객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

보류 중인 콜백을 실행합니다. 콜백 이 :apply_defaults인 경우 이 문서 에 기본값을 적용 합니다. 그렇지 않으면 콜백 이 run_callbacks 함수로 전달됩니다.

[소스 보기]

285
286
287
288
289
290
291
292
293
294
# 파일 'lib/mongoid/interceptable.rb', 285줄

def run_pending_callbacks
  보류 중인_콜백. do |cb|
    만약 [:apply_defaults, :apply_post_processed_defaults].포함?(cb)
      send(cb)
    other
      self.run_callbacks(cb, with_children: 거짓)
    end
  end
  보류 중인_콜백.지우기
end