Module: RapidyamlRb
- Defined in:
- lib/rapidyaml_rb.rb,
lib/rapidyaml_rb/version.rb
Constant Summary collapse
- ParseError =
Error and SyntaxError are defined in the C extension (Init_rapidyaml_rb). ParseError is kept as an alias for backward compatibility.
SyntaxError- DATE_RE =
Regex patterns for scalar coercion during load. Only applied when the corresponding class is in permitted_classes.
/\A(\d{4})-(\d{2})-(\d{2})\z/- DATETIME_RE =
/\A\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?(?: ?(?:Z|[+-]\d{2}:?\d{2}))?\z/- VERSION =
"0.1.0"
Class Method Summary collapse
-
.dump(obj) ⇒ String
Serializes a Ruby object to a YAML string.
-
.dump_file(obj, path) ⇒ void
Serializes a Ruby object to a YAML file.
-
.dump_stream(*objects) ⇒ String
Serializes multiple Ruby objects into a multi-document YAML stream.
-
.libyaml_version ⇒ String
Returns the version string of the bundled rapidyaml C++ library.
-
.load(yaml, symbolize_names: false, permitted_classes: []) ⇒ Object
Parses a YAML string and returns the corresponding Ruby object.
-
.load_file(path, symbolize_names: false, permitted_classes: []) ⇒ Object
Parses YAML from a file and returns the corresponding Ruby object.
-
.load_stream(yaml, symbolize_names: false, permitted_classes: []) {|Object| ... } ⇒ Array?
Parses all YAML documents in a string and yields each as a Ruby object.
-
.safe_dump(obj) ⇒ String
Equivalent to dump; rapidyaml does not serialize arbitrary Ruby objects, so there is no unsafe surface to restrict.
-
.safe_load(yaml, symbolize_names: false, permitted_classes: []) ⇒ Object
Alias matching Psych.safe_load; rapidyaml does not execute arbitrary code, so this is equivalent to load for all practical purposes.
- .safe_load_stream(yaml, symbolize_names: false, permitted_classes: [], &block) ⇒ Object
-
.unsafe_load(yaml, symbolize_names: false, permitted_classes: []) ⇒ Object
Alias matching Psych.unsafe_load; rapidyaml never executes arbitrary Ruby object tags, so this is equivalent to load.
-
.unsafe_load_file(path, symbolize_names: false, permitted_classes: []) ⇒ Object
Alias matching Psych.unsafe_load_file; rapidyaml never executes arbitrary Ruby object tags, so this is equivalent to load_file.
Class Method Details
.dump(obj) ⇒ String
Serializes a Ruby object to a YAML string.
56 57 58 |
# File 'lib/rapidyaml_rb.rb', line 56 def dump(obj) Ext.emit(obj) end |
.dump_file(obj, path) ⇒ void
This method returns an undefined value.
Serializes a Ruby object to a YAML file.
157 158 159 |
# File 'lib/rapidyaml_rb.rb', line 157 def dump_file(obj, path) File.write(path, dump(obj)) end |
.dump_stream(*objects) ⇒ String
Serializes multiple Ruby objects into a multi-document YAML stream.
65 66 67 68 69 70 |
# File 'lib/rapidyaml_rb.rb', line 65 def dump_stream(*objects) objects.map { |obj| s = dump(obj) obj.is_a?(Hash) || obj.is_a?(Array) ? "---\n#{s}" : "--- #{s}" }.join end |
.libyaml_version ⇒ String
Returns the version string of the bundled rapidyaml C++ library. Psych exposes libyaml_version; this is the equivalent for rapidyaml.
85 86 87 |
# File 'lib/rapidyaml_rb.rb', line 85 def libyaml_version Ext.ryml_version end |
.load(yaml, symbolize_names: false, permitted_classes: []) ⇒ Object
Parses a YAML string and returns the corresponding Ruby object.
33 34 35 36 37 |
# File 'lib/rapidyaml_rb.rb', line 33 def load(yaml, symbolize_names: false, permitted_classes: []) result = Ext.parse(yaml) result = coerce_scalars(result, permitted_classes) unless permitted_classes.empty? symbolize_names ? deep_symbolize_keys(result) : result end |
.load_file(path, symbolize_names: false, permitted_classes: []) ⇒ Object
Parses YAML from a file and returns the corresponding Ruby object.
146 147 148 149 |
# File 'lib/rapidyaml_rb.rb', line 146 def load_file(path, symbolize_names: false, permitted_classes: []) load(File.read(path), symbolize_names: symbolize_names, permitted_classes: permitted_classes) end |
.load_stream(yaml, symbolize_names: false, permitted_classes: []) {|Object| ... } ⇒ Array?
Parses all YAML documents in a string and yields each as a Ruby object. If no block given, returns an array of all documents.
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rapidyaml_rb.rb', line 97 def load_stream(yaml, symbolize_names: false, permitted_classes: [], &block) result = Ext.parse_stream(yaml) docs = result.is_a?(Array) ? result : [result] docs = docs.map { |d| coerce_scalars(d, permitted_classes) } unless permitted_classes.empty? docs = docs.map { |d| deep_symbolize_keys(d) } if symbolize_names if block docs.each(&block) nil else docs end end |
.safe_dump(obj) ⇒ String
Equivalent to dump; rapidyaml does not serialize arbitrary Ruby objects, so there is no unsafe surface to restrict.
77 78 79 |
# File 'lib/rapidyaml_rb.rb', line 77 def safe_dump(obj) dump(obj) end |
.safe_load(yaml, symbolize_names: false, permitted_classes: []) ⇒ Object
Alias matching Psych.safe_load; rapidyaml does not execute arbitrary code, so this is equivalent to load for all practical purposes.
47 48 49 |
# File 'lib/rapidyaml_rb.rb', line 47 def safe_load(yaml, symbolize_names: false, permitted_classes: []) load(yaml, symbolize_names: symbolize_names, permitted_classes: permitted_classes) end |
.safe_load_stream(yaml, symbolize_names: false, permitted_classes: [], &block) ⇒ Object
111 112 113 114 |
# File 'lib/rapidyaml_rb.rb', line 111 def safe_load_stream(yaml, symbolize_names: false, permitted_classes: [], &block) load_stream(yaml, symbolize_names: symbolize_names, permitted_classes: permitted_classes, &block) end |
.unsafe_load(yaml, symbolize_names: false, permitted_classes: []) ⇒ Object
Alias matching Psych.unsafe_load; rapidyaml never executes arbitrary Ruby object tags, so this is equivalent to load.
123 124 125 |
# File 'lib/rapidyaml_rb.rb', line 123 def unsafe_load(yaml, symbolize_names: false, permitted_classes: []) load(yaml, symbolize_names: symbolize_names, permitted_classes: permitted_classes) end |
.unsafe_load_file(path, symbolize_names: false, permitted_classes: []) ⇒ Object
Alias matching Psych.unsafe_load_file; rapidyaml never executes arbitrary Ruby object tags, so this is equivalent to load_file.
134 135 136 |
# File 'lib/rapidyaml_rb.rb', line 134 def unsafe_load_file(path, symbolize_names: false, permitted_classes: []) load_file(path, symbolize_names: symbolize_names, permitted_classes: permitted_classes) end |