Ruby에서 To_yaml의 형식 옵션을 지정할 수 있습니까?
문제
코드
require 'yaml'
puts YAML.load("
is_something:
values: ['yes', 'no']
").to_yaml
생산합니다
---
is_something:
values:
- "yes"
- "no"
이것은 올바른 YAML이지만 배열 해시가있을 때 추악 해 보입니다. 내가 얻는 방법이 있습니까? to_yaml
Yaml의 인라인 배열 버전을 생성하려면?
옵션 해시를 전달할 수 있습니다 to_yaml
하지만 어떻게 사용합니까?
편집 0 : 감사합니다 Pozsár Balázs. 그러나 Ruby 1.8.7 (2009-04-08 Patchlevel 160)에서 옵션 해시는 광고 된대로 작동하지 않습니다. :(
irb
irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> puts [[ 'Crispin', 'Glover' ]].to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true )
---
- - Crispin
- Glover
=> nil
해결책 2
이 못생긴 해킹은 트릭을하는 것 같습니다 ...
class Array
def to_yaml_style
:inline
end
end
루비의 소스를 탐색하면서 동일한 달성을 위해 전달할 수있는 옵션을 찾을 수 없습니다. 기본 옵션은 다음에 설명되어 있습니다 lib/yaml/constants.rb.
다른 팁
해시 옵션에 대해 : 참조 http://yaml4r.sourceforge.net/doc/page/examples.htm
전. 24 : 사용 to_yaml
옵션 해시
puts [[ 'Crispin', 'Glover' ]].to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true )
# prints:
# --- %YAML:1.0
# -
# - Crispin
# - Glover
전. 25 : 옵션 해시에 사용 가능한 기호
Indent
: 방출 할 때 사용할 기본 압입 (기본값2
)
Separator
: 문서 사이에 사용할 기본 분리기 (기본값으로'---'
)
SortKeys
: 방출 할 때 해시 키 정렬? (기본값false
)
UseHeader
: 방출 할 때 Yaml 헤더를 표시합니까? (기본값false
)
UseVersion
: 방출 할 때 Yaml 버전을 표시합니까? (기본값false
)
AnchorFormat
: 방출시 앵커 ID의 서식 문자열 (기본값으로 'id%03d
')
ExplicitTypes
: 방출 할 때 명시 적 유형을 사용합니까? (기본값false
)
BestWidth
: 텍스트를 접을 때 사용할 문자 너비 (기본값으로80
)
UseFold
: 방출 할 때 텍스트를 강제로 접는다? (기본값false
)
UseBlock
: 방출 할 때 모든 텍스트를 문자 그대로 강제로 강요합니까? (기본값false
)
Encoding
: 인코딩 할 유니 코드 형식 (기본값으로:Utf8
; ICONV 필요)
루비에서 시작하여 1.9 psych
기본 YAML 엔진으로 사용됩니다. 몇 가지 속성을 지원합니다. http://ruby-doc.org/stdlib-2.1.0/libdoc/psych/rdoc/psych/handler/dumperoptions.html
그래서 나에게 그것은 효과가 있습니다 :
irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> puts [{'a'=> 'b', 'c'=> 'd'}, {'e'=> 'f', 'g'=>'h'}].to_yaml(:indentation => 4)
---
- a: b
c: d
- e: f
g: h
출력 스타일을 지정하기위한 또 다른 해킹만으로도 전체적으로 (예 : 모든 배열에 대한) 대신 특정 객체 당 사용자 정의 할 수 있습니다.
https://gist.github.com/jirutka/31b1a61162e41d5064fc
Simple example:
class Movie
attr_accessor :genres, :actors
# method called by psych to render YAML
def encode_with(coder)
# render array inline (flow style)
coder['genres'] = StyledYAML.inline(genres) if genres
# render in default style (block)
coder['actors'] = actors if actors
end
end
루비의 최신 버전은 YAML 파싱에 Psych Module을 사용합니다. 통과 할 수있는 옵션은 많지 않지만 들리와 선 너비를 변경할 수 있습니다. 최신 정보를 확인하십시오 정신 문서 자세한 사항은.