나는 생각을 가지고있다. 그러나 그것은 의미가있다. 아마 당신, 친애하는 독자, 도울 수 있습니다. :)YAML 파일에 루비 저장하기
내가 YAML 파일을 통해 사용자를 구성 할 수 있습니다 루비 기반의 CLI 응용 프로그램을 만들었습니다
설정. 이 파일에는 사용자가 메시지를 표시하는 사전 및 사후 "작업"을 정의 할 수있는 시나리오가 있습니다 (중간에 임의의 관련이없는 코드가 있음). 예를 들어이 경우
actions:
- action
# ...other keys...
pre:
message: 'This is the pre message'
action: puts 'PRE COMMAND'
post:
message: 'This is the post message'
action: puts 'POST COMMAND'
, 내 응용 프로그램이 출력 This is the pre message
, (따라서 PRE COMMAND
를 출력)은 "전"행동을 평가하는 것입니다, 일부 관련이없는 물건, 출력 This is the post message
을, 그리고 마지막으로 이렇게 (이하 "게시물"행동을 평가 POST COMMAND
을 출력).
문제점
당신은 이미 문제를 추측 할 수있다; 내가 "평가하다"라는 말을 사용했을 때 나타났다. 그것은 무서운 것입니다. 이것은 로컬에서 실행되는 클라이언트 중심의 앱이지만 임의의 루비를 평가하는 아이디어는 두려운 것입니다.
솔루션 아이디어 # 1
첫 번째 아이디어는 바로 그 것이었다 : 작업을 평가 후면. 나는 그것을 빨리 파괴했다. (당신이 알지 못한다면 - Ruby-than-me 타입은 나를 다르게 설득 할 수있다.)
솔루션 아이디어 # 2
는 명령이 "유효"어떻게 든 것을 검증하기 위해 (아마도, 정규 표현식을 통해) 일부 "확인"마십시오. 그것은 크게 크고 어렵게 보입니다.솔루션 아이디어 # 3
또 다른 아이디어는 (따라서 사용자가 정의 할 수있는 가능성을 제한) 내 자신의 데이터 구조에서 허용 명령을 포장했다. 예를 들어 open_url
작업을 만들어 기본 브라우저에서 안전하게 URL의 유효성을 검사하고 엽니 다.
저는이 아이디어가 마음에 들지만 다소 제한적으로 보입니다. 시간이 지남에 따라 많은 랩퍼를 정의해야 할 것 같습니다. 그러나 아마도 그것은 안전을 위해 지불하는 가격입니까?
귀하의 전원을 켜고
나는 당신이 추가 생각 주셔서 감사합니다!
그러나 이것은 사용자 정의 가능한 프레임 워크가 직면 한 문제의 변형 일뿐입니다. Ruby On Rails가 나에게 돌아 왔고 페이지 렌더링 프로세스에 내 자신의 코드를 삽입 할 수있게되면 아무 일도 일어나지 않습니다. 인생이 다 그렇지; 그것은 프로그래밍입니다. 나는 문자열의'eval'을 조언하지 않을 것이다; "작업"이 _script 파일에 대한 참조 인 경우로드 (필요)하고 호출 할 수있는 것이 더 좋을 수 있습니다. 그러나 이런 종류의 일은 협력 적 벤처입니다. 사용자가 발을 쏘려는 경우이를 막을 수 없습니다. – matt
맞음, @matt. 묻고 싶다는 나의 의도는 두뇌가 문제를 해결할 수있는 우아한 방법이라고 생각하는 것입니다 (그 중 귀하의 의견은 하나임). – ABach