هل من الممكن تحديد خيارات التنسيق لـ 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:شكرا بوزار بالاز.ولكن، اعتبارًا من روبي 1.8.7 (2009-04-08 مستوى التصحيح 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
والتصفح من خلال مصدر روبي، وأنا لا يمكن العثور على أي خيارات I يمكن أن تمر على تحقيق ذاته. ووصف الخيارات الافتراضية في ليب / YAML / constants.rb .
نصائح أخرى
وعن خيارات التجزئة: انظر http://yaml4r.sourceforge.net/doc/ صفحة / 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%03d
')
ExplicitTypes
: استخدام أنواع صريحة عندما تنبعث منها؟ (الافتراضي false
)
BestWidth
: عرض شخصية لاستخدامها عند طي النص (الافتراضي 80
)
UseFold
: قوة قابلة للطي من النص عندما تنبعث منها؟ (الافتراضي false
)
UseBlock
: فرض كل النص الحرفي لتكون عندما تنبعث منها؟ (الافتراضي false
)
Encoding
: تنسيق يونيكود لتشفير مع (الافتراضي :Utf8
، يتطلب يكونف)
ويستخدم ابتداء من روبي 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
ومثال بسيط:
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
تستخدم أحدث إصدارات Ruby الوحدة Psych لتحليل YAML.ليس هناك العديد من الخيارات التي يمكنك تمريرها ولكن يمكنك تغيير المسافة البادئة وعرض الخط.تحقق من الأحدث التوثيق النفسي لمزيد من التفاصيل.