모듈: Mongoid::Attributes::Dynamic

확장자:
ActiveSupport::Concern
다음에 정의됨:
lib/mongoid/attributes/dynamic.rb

개요

이 모듈에는 동적 속성에 대한 동작이 포함되어 있습니다.

인스턴스 메서드 요약 접기

동적 메서드 처리

이 클래스는 메서드 누락 메서드를 통해 동적 메서드를 처리합니다.

#메서드 누락(이름, *args) ⇒ 객체

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

동적 속성에 대한 접근자 메서드를 허용하는 데 사용됩니다.

예시:

Method_missing을 통해 호출합니다.

document.method_missing(:test)

매개변수:

  • 이름 (string | 기호)

    메서드의 이름입니다.

  • *args (객체...)

    메서드에 대한 인수입니다.

반환합니다:

  • (객체)

    메서드 호출의 결과입니다.



122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 122

def Method_missing(이름, *args)
  속성 = 이름.to_s
  반환 super 하지 않는 한 속성.has_key?(속성.리더)
  만약 속성.작가?
    게터 = 속성.리더
    describe_dynamic_writer(게터)
    write_attribute(게터, args.first)
  elsif 속성.before_type_cast?
    describe_dynamic_before_type_cast_reader(속성.리더)
    attribute_write_change!(속성.리더)
    read_attribute_before_type_cast(속성.리더)
  other
    게터 = 속성.리더
    describe_dynamic_reader(게터)
    attribute_write_change!(속성.리더)
    read_raw_attribute(게터)
  end
end

인스턴스 메서드 세부 정보

#describe_dynamic_before_type_cast_reader(name) ⇒ 객체

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

유형 캐스트 전에 동적 속성에 대한 판독기 메서드를 정의합니다.

예시:

속성에 대한 판독기 메서드를 정의합니다.

model.define_dynamic_before_type_cast_reader(:field)

매개변수:

  • 이름 (string)

    필드의 이름입니다.



54
55
56
57
58
59
60
61
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 54

def describe_dynamic_before_type_cast_reader(이름)
  class_eval do
    정의_메서드("#{name}_before_type_cast") do
      attribute_write_change!(이름)
      read_attribute_before_type_cast(이름)
    end
  end
end

#describe_dynamic_reader(name) ⇒ 객체

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

동적 속성에 대한 판독기 메서드를 정의합니다.

예시:

판독기 메서드를 정의합니다.

model.define_dynamic_reader(:field)

매개변수:

  • 이름 (string)

    필드의 이름입니다.



35
36
37
38
39
40
41
42
43
44
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 35

def describe_dynamic_reader(이름)
  반환 하지 않는 한 이름.valid_method_name?

  class_eval do
    정의_메서드(이름) do
      attribute_write_change!(이름)
      read_raw_attribute(이름)
    end
  end
end

#describe_dynamic_writer(name) ⇒ 객체

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

동적 속성에 대한 작성기 메서드를 정의합니다.

예시:

작성기 메서드를 정의합니다.

model.define_dynamic_writer(:field)

매개변수:

  • 이름 (string)

    필드의 이름입니다.



71
72
73
74
75
76
77
78
79
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 71

def describe_dynamic_writer(이름)
  반환 하지 않는 한 이름.valid_method_name?

  class_eval do
    정의_메서드("#{name}=") do |value|
      write_attribute(이름, value)
    end
  end
end

#검사_동적_필드string

문서 에 대해 검사된 동적 필드의 배열 을 가져옵니다.

예시:

동적 필드를 검사합니다.

document.inspect_dynamic_fields

반환합니다:

  • (string)

    예쁘게 인쇄된 동적 필드 값의 배열 입니다.



104
105
106
107
108
109
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 104

def Inspect_dynamic_fields
   = 속성. - 필드. - 관계. - ["_id", self.클래스.판별자_키]
  반환 .map do |이름|
    "#{name}: #{attributes[name].검사}"
  end
end

#process_attribute(이름, 값) ⇒ 객체

속성이 동적인 경우 객체 유형으로 속성에 대한 필드를 추가하고 값을 설정합니다.

예시:

속성을 처리합니다.

document.process_attribute(name, value)

매개변수:

  • 이름 (기호)

    필드의 이름입니다.

  • value (객체)

    필드의 값입니다.



89
90
91
92
93
94
95
96
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 89

def process_attribute(이름, value)
  응답 = response_to?("#{name}=")
  만약 !응답
    write_attribute(이름, value)
  other
    send("#{name}=", value)
  end
end

#respond_to?(name, include_private = false) ⇒ true | false

response_to를 재정의하시겠습니까? 동적 속성에 올바르게 응답합니다.

예시:

이 객체가 메서드에 응답하나요?

person.respond_to?(:title)

매개변수:

  • 이름 (배열)

    메서드의 이름입니다.

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

반환합니다:

  • (true | false)

    있으면 참, 그렇지 않으면 거짓입니다.



20
21
22
23
24
25
# 파일 'lib/mongoid/attributes/dynamic.rb', 줄 20

def response_to?(이름, include_private = 거짓)
  super || (
    속성 &&
    속성.has_key?(이름.to_s.리더)
  )
end