2014-12-11 2 views
0

저는 YAML을 배우기 시작했습니다. 저는 성취하고자하는 것에 대해 모범 사례를 찾지 못했습니다. 기본적으로, 나는 YAML 파일에 객체 배열을 가지고 있는데, 제작을 위해이 배열에 1 개의 항목을 추가하고 싶다. 내가 루비 내 YAML 파일을 구문 분석하고있어, 현재YAML : 배열을 변수로 저장

development: 
    array: &ARRAY 
    - name: item1 
    value: value1 
    - name: item2 
    value: value2 

production: 
    <<: *ARRAY 
    array: 
    - name: item3 
    value: value3 

을, 그래서 나는 루비에서이 논리를 처리하기로 결정 그래서 (나는이 유효 YAML 아니다 알고 있기 때문에 그것의 의사 코드) 나는 기본적으로 같은 것을 원한다. 나는 다음과 같은 것을하고있다.

yaml_contents = YAML::load(yaml_string) 
prod_values = yaml_contents['production'] 
prod_values['array'].push({:name => 'item3', :value => 'value3'}) 

그러나 이것은 내 로딩 스크립트를 매우 털이 만들 수있다. 이것을 설계하는 더 좋은 방법이 있습니까?

나는 this question이 관련되어 있다고 생각합니다.

+0

좋아 .. 이제 알았어. 내 대답을 삭제했습니다. – shivam

+0

yaml에서 sequures를 병합 할 방법이 없지만 해시로 바꿀 수는 있습니다. – amenzhinsky

+0

그러나 해시로 바꾸면 고유 키가 있어야 함을 의미합니다. 이는 설계가 어떻게 필요한지에 대해서는 불가능합니다. – incutonez

답변

1

<< 구문은 시퀀스가 ​​아닌 맵 (즉, 해시)을 병합하기위한 구문입니다. 당신이 뭔가를 할 수 있습니다 :

development: &ARRAY 
    - name: item1 
    value: value1 
    - name: item2 
    value: value2 

production: 
    - *ARRAY 
    - name: item3 
    value: value3 

당신은로드 할 때이 당신이 flatten 사용해야합니다, 그래서 중첩 배열이됩니다 production 배열 : 실제 데이터가 중첩 된 해시를 포함 할 수 있다면

yaml_contents = YAML::load(yaml_string) 
prod_values = yaml_contents['production'].flatten 

을 그리고 Yaml에서 별칭으로 나타나는 어레이를 평평하게 만들고 싶다면 자신의 Psych 방문자 (아마도 하위 클래스 Psych::Visitors::ToRuby)를 작성하고 객체 그래프를 만들 때 병합하면 좋겠지 만 flatten으로 충분할 것입니다. 이 경우에.

+0

나는 네가 절대적으로 옳다고 생각한다. 나는 이것이 답이라고 생각한다. 좀 더 광범위한 테스트를 먼저 할 것입니다. 감사! – incutonez

+0

이것은 정확히 내가 찾고 있었던 것입니다. 고마워요! – incutonez