복붙노트

[RUBY-ON-RAILS] 변수를 사용 YAML

RUBY-ON-RAILS

변수를 사용 YAML

YAML 파일 내 변수는 수 있는가? 예를 들면 :

theme:
  name: default
  css_path: compiled/themes/$theme.name
  layout_path: themes/$theme.name

이 예에서, 어떻게 테마 : 이름 : 기본값은 다른 설정에 사용? 구문은 무엇입니까?

해결법

  1. ==============================

    1.나는이 같은 질문을했다, 그것은 불가능처럼 많은 연구 후에, 그것은 보인다.

    나는이 같은 질문을했다, 그것은 불가능처럼 많은 연구 후에, 그것은 보인다.

    cgat에서 대답은 바른 길에,하지만 당신은 그런 사실 합칠 수없는 참조를 할 수 있습니다.

    여기에 (공식적으로 당신이 그들을 설정할 때 "노드 앵커"라고하며 "참조"당신이 나중에 사용할 때하는) 당신이 YAML에서 "변수"로 할 수있는 작업은 다음과 같습니다

    default: &default_title This Post Has No Title
    title: *default_title
    

    {또는}

    example_post: &example
      title: My mom likes roosters
      body: Seriously, she does. And I don't know when it started.
      date: 8/18/2012
    first_post: *example
    second_post:
      title: whatever, etc.
    

    더 많은 정보를 원하시면, YAML에 대한 위키 페이지의이 섹션을 참조하십시오 : http://en.wikipedia.org/wiki/YAML#References

    default: &DEFAULT
      URL:          stooges.com
      throw_pies?:  true  
      stooges:  &stooge_list
        larry:  first_stooge
        moe:    second_stooge
        curly:  third_stooge
    
    development:
      <<: *DEFAULT
      URL:      stooges.local
      stooges: 
        shemp: fourth_stooge
    
    test:
      <<: *DEFAULT
      URL:    test.stooges.qa
      stooges: 
        <<: *stooge_list
        shemp: fourth_stooge
    

    이 여기에 큰 데모에서 직접 가져온 것입니다 https://gist.github.com/bowsersenior/979804

  2. ==============================

    2.일부 검색 후, 나는 % 연산자를 사용 느릅 나무 깨끗한 솔루션을 찾았습니다.

    일부 검색 후, 나는 % 연산자를 사용 느릅 나무 깨끗한 솔루션을 찾았습니다.

    당신의 YAML 파일에서 :

    key : 'This is the foobar var : %{foobar}'
    

    당신의 루비 코드에서 :

    require 'yaml'
    
    file = YAML.load_file('your_file.yml')
    
    foobar = 'Hello World !'
    content = file['key']
    modified_content = content % { :foobar => foobar }
    
    puts modified_content
    

    그리고 출력은 다음과 같습니다

    This is the foobar var : Hello World !
    

    @jschorr이 코멘트에 말했듯이, 당신은 또한 YAML 파일의 값에 여러 변수를 추가 할 수 있습니다 :

    YAML :

    key : 'The foo var is %{foo} and the bar var is %{bar} !'
    

    루비 :

    # ...
    foo = 'FOO'
    bar = 'BAR'
    # ...
    modified_content = content % { :foo => foo, :bar => bar }
    

    출력 :

    The foo var is FOO and the bar var is BAR !
    
  3. ==============================

    3.이것은 이전 게시물입니다,하지만 난 비슷한 요구를했고 이것이 내가 생각 해낸 솔루션입니다. 그것은 해킹의 비트이지만, 작업 및 정제 할 수있다.

    이것은 이전 게시물입니다,하지만 난 비슷한 요구를했고 이것이 내가 생각 해낸 솔루션입니다. 그것은 해킹의 비트이지만, 작업 및 정제 할 수있다.

    require 'erb'
    require 'yaml'
    
    doc = <<-EOF
      theme:
      name: default
      css_path: compiled/themes/<%= data['theme']['name'] %>
      layout_path: themes/<%= data['theme']['name'] %>
      image_path: <%= data['theme']['css_path'] %>/images
      recursive_path: <%= data['theme']['image_path'] %>/plus/one/more
    EOF
    
    data = YAML::load("---" + doc)
    
    template = ERB.new(data.to_yaml);
    str = template.result(binding)
    while /<%=.*%>/.match(str) != nil
      str = ERB.new(str).result(binding)
    end
    
    puts str
    

    큰 단점은 변수 명 (이 경우, "데이터") 또는 존재하지 않을 수도 YAML 문서로 구축이다. 아마도 더 나은 솔루션은 $를 사용하고 ERB에 앞서 루비에서 변수의 이름으로 대체하는 것입니다. 또한, 단지 눈에 훨씬 더 쉽게 data.theme.name 유형의 표기법을 허용 hashes2ostruct를 사용하여 테스트. 필요한 모든 것은이 함께 YAML :: 부하를 래핑하는 것입니다

    data = hashes2ostruct(YAML::load("---" + doc))
    

    그런 다음 YAML 문서는 다음과 같이 할 수 있습니다

    doc = <<-EOF
      theme:
      name: default
      css_path: compiled/themes/<%= data.theme.name %>
      layout_path: themes/<%= data.theme.name %>
      image_path: <%= data.theme.css_path %>/images
      recursive_path: <%= data.theme.image_path %>/plus/one/more
    EOF
    
  4. ==============================

    4.레일 / 루비 프레임 워크는 자주 부하 ENV 변수에 사용되는 ... 일부 템플릿을 할 수 있습니다 ...

    레일 / 루비 프레임 워크는 자주 부하 ENV 변수에 사용되는 ... 일부 템플릿을 할 수 있습니다 ...

    # fooz.yml
      foo:
        bar: <%= $ENV[:some_var] %>
    

    자바 스크립트 프레임 워크에 대해이 작품은 내가 YML 형식은 JSON의 상위 집합이라고 생각하는 그것이 당신을 위해 YML 파일을 읽고 무엇에 의존하는 경우 아무 생각이 없습니다.

    당신이 나 같은 템플릿을 사용할 수있는 경우 << >> 또는 그 직후 독자에 따라 {{}} 스타일, ...

    또 다른 YML 파일 ...

    # boo.yml
    
    development:
      fooz: foo
    

    당신은 기본적으로 참조로 변수를 삽입 할 수있는 원래의 파일을 동적으로 설정 될 때마다. 읽을 때 나는 또한 당신이 만들 수 있습니다보고하거나 파일 및 체인 쓰기를 YML 파일의 시리즈를 만들거나 그냥 모든 정적 동적으로 생성 한 가리키는 가질 수 있도록 여러 언어에 대한 즉시 객체와 같은 오픈 YML 파일했다.

  5. from https://stackoverflow.com/questions/4150782/use-yaml-with-variables by cc-by-sa and MIT license