2016-11-03 2 views
3

릴리스 사이에 추가 한 이야기 ​​목록을 저장하는 데 사용하는 yml 파일이 있습니다.Ruby YAML 파일에 덧글 블록 추가하기

rake 작업을 사용하여이 파일에 추가 한 스토리에 따라 버전 번호를 동적으로 업데이트합니다. 문제는 내 레이크 작업이 작업을 완료 한 후

# Version control file. 
# Versions should be incremented as follows 
# 
# [X - major change] . [V - new feature] . [I - Bug fix/Small change] 
# 
# Update the undefined block with a one line readable description of what your story was about. example: 
# 
# undefined: 
# stories: 
# - "I - fixed spelling mistake" 
# - "V - added import functionality" 
# - "X - rebuilt the main dashboard" 
# 

:

그것은 새로운 프로세스를 도입

, 그래서 나는이 올바른 형식으로 이야기를 추가하려면 여기 코멘트 사람을 도움이 될 것입니다 다음 주석 블록을 생성 파일에 주석 블록이 없어집니다.

나는 꽤 많은 부하 YAML versions = YAML.load_file('doc/release.yml') 다음 논리가 완료되면 I versions 새로운 업데이트 해시입니다

File.open("doc/release.yml", 'w') { |f| YAML.dump(versions, f) }. 그러나 이것은 주석 블록을 파일로 제거합니다.

다른 해결책 내가 찾은 바는 기존 라인을 수정 한 것입니다.

YAML을 엉망으로 만들지 않고 파일을 열고 위의 내용을 추가하는 방법이 있습니까? 어떤 도움을 많이 주시면 감사하겠습니다.

답변

1

덤프와 함께 주석이 유실되는 것은 불행한 일입니다.

  1. 당신은 YAML에 일반 .dump 방법을 덮어 쓸 수는 자신을 덤프 할, 당신의 버전 { :a => 'b'}.to_yaml을 YAML하는 해시 변환 주석을 추가하고 File.write
  2. 는 코멘트를 할당이 방법 : 두 가지 옵션이 있습니다 yaml 파일 의 끝에 더미 값을 써서 버전으로 읽어 들여 저장합니다.
+0

당신이 꽃 봉오리 감사합니다! 나는 이것을 지금'File.open ('doc/release.yml', 'w') {| f | f.write comment_block; f.write versions.to_yaml}','comment_block' 메쏘드는 주석 블록의 문자열 버전을 리턴합니다. 이것은 효과가 있습니다. – TheLegend

1

가능한 해결책은 다음과 같습니다. release.yml와

require 'yaml' 

versions_yaml = File.read('release.yml') 
versions = YAML.load(versions_yaml) 
comments = versions_yaml.scan(/^#.*?$/) 

File.open("release2.yml", 'w') { |f| 
    f.puts comments 
    YAML.dump(versions, f) 
} 

puts File.read("release2.yml") 

는 :

# I'm a comment on first line 
--- 
- 1 
- 2 
- 3 
# I'm a comment somewhere in the middle 
- - 4 
    - 5 

는 출력 :

# I'm a comment on first line 
# I'm a comment somewhere in the middle 
--- 
- 1 
- 2 
- 3 
- - 4 
    - 5 
+1

진실의 다른 근원을 창조하지 않기 때문에 나는이 접근법을 정말 좋아합니다. 주석은 주석입니다. – TheLegend