InfoGrab DocsInfoGrab Docs

GitLab 유틸리티

개발 편의를 위해 제공되는 MergeHash, Override, StrongMemoize, RequestCache, ReactiveCaching, TokenAuthenticatable, CircuitBreaker 등 GitLab 개발 유틸리티를 설명합니다.

개발을 더 쉽게 하기 위해 다음과 같은 여러 유틸리티를 개발했습니다. MergeHash # merge_hash.rb 를 참고하세요. 해시, 배열, 기타 객체가 될 수 있는 요소들의 배열을 깊게(deep) 병합합니다. Gitlab::Utils::MergeHash.merge( [{ hello: ["world"] }, { hello: "Everyone" }, { hello: { greetings: ['Bonjour', 'Hello', 'Hallo', 'Dzien dobry'] } }, "Goodbye", "Hallo"] ) 결과: [ { hello: [ "world", "Everyone", { greetings: ['Bonjour', 'Hello', 'Hallo', 'Dzien dobry'] } ] }, "Goodbye" ] 해시의 모든 키와 값을 배열로 추출합니다. Gitlab::Utils::MergeHash.crush( { hello: "world", this: { crushes: ["an entire", "hash"] } } ) 결과: [:hello, "world", :this, :crushes, "an entire", "hash"] Override # override.rb 를 참고하세요. 이 유틸리티는 하나의 메서드가 다른 메서드를 오버라이드하는지 여부를 확인하는 데 도움이 됩니다. Java의 @Override 어노테이션이나 Scala의 override 키워드와 동일한 개념입니다. 단, 프로덕션 런타임 오버헤드를 피하기 위해 ENV['STATIC_VERIFICATION'] 이 설정된 경우에만 이 검사를 실행합니다. 이 유틸리티는 다음을 확인하는 데 유용합니다. 오버라이드 메서드에 오타가 있는 경우. 오버라이드된 메서드의 이름을 변경하여 기존 오버라이드 메서드가 더 이상 관련이 없게 된 경우. 간단한 예시는 다음과 같습니다. class Base def execute end end class Derived < Base extend ::Gitlab::Utils::Override override :execute # Override check happens here def execute end end 모듈에서도 동작합니다. module Extension extend ::Gitlab::Utils::Override override :execute # Modules do not check this immediately def execute end end class Derived < Base prepend Extension # Override check happens here, not in the module end 검사는 다음 중 하나에 해당할 때만 수행됩니다. 오버라이드 메서드가 클래스에 정의된 경우, 또는: 오버라이드 메서드가 모듈에 정의되어 있고 클래스나 모듈에 prepend된 경우. 클래스 또는 prepend된 모듈만 실제로 메서드를 오버라이드할 수 있기 때문입니다. 모듈을 다른 곳에 include하거나 extend하는 것은