Module: Psychgus
- Extended by:
- PsychDropIn
- Defined in:
- lib/psychgus.rb,
lib/psychgus/styler.rb,
lib/psychgus/stylers.rb,
lib/psychgus/version.rb,
lib/psychgus/blueberry.rb,
lib/psychgus/stylables.rb,
lib/psychgus/ext/core_ext.rb,
lib/psychgus/ext/node_ext.rb,
lib/psychgus/super_sniffer.rb,
lib/psychgus/ext/yaml_tree_ext.rb,
lib/psychgus/styled_tree_builder.rb,
lib/psychgus/super_sniffer/parent.rb,
lib/psychgus/styled_document_stream.rb
Overview
– This file is part of Psychgus. Copyright © 2019 Bradley Whited
SPDX-License-Identifier: LGPL-3.0-or-later ++
Defined Under Namespace
Modules: Blueberry, Ext, PsychDropIn, Stylables, Styler, Stylers Classes: StyledDocumentStream, StyledTreeBuilder, SuperSniffer
Constant Summary collapse
- NODE_CLASS_ALIASES =
{Doc: :Document,Map: :Mapping,Seq: :Sequence}.freeze
- OPTIONS_ALIASES =
{canon: :canonical,indent: :indentation}.freeze
- MAPPING_ANY =
node_const(:mapping,:any)
- MAPPING_BLOCK =
node_const(:mapping,:block)
- MAPPING_FLOW =
node_const(:mapping,:flow)
- MAP_ANY =
MAPPING_ANY
- MAP_BLOCK =
MAPPING_BLOCK
- MAP_FLOW =
MAPPING_FLOW
- SCALAR_ANY =
node_const(:scalar,:any)
- SCALAR_PLAIN =
node_const(:scalar,:plain)
- SCALAR_SINGLE_QUOTED =
node_const(:scalar,:single_quoted)
- SCALAR_DOUBLE_QUOTED =
node_const(:scalar,:double_quoted)
- SCALAR_LITERAL =
node_const(:scalar,:literal)
- SCALAR_FOLDED =
node_const(:scalar,:folded)
- SEQUENCE_ANY =
node_const(:sequence,:any)
- SEQUENCE_BLOCK =
node_const(:sequence,:block)
- SEQUENCE_FLOW =
node_const(:sequence,:flow)
- SEQ_ANY =
SEQUENCE_ANY
- SEQ_BLOCK =
SEQUENCE_BLOCK
- SEQ_FLOW =
SEQUENCE_FLOW
- STREAM_ANY =
node_const(:stream,:any)
- STREAM_UTF8 =
node_const(:stream,:utf8)
- STREAM_UTF16LE =
node_const(:stream,:utf16le)
- STREAM_UTF16BE =
node_const(:stream,:utf16be)
- VERSION =
Version of this gem in “#.#.#” format.
'1.3.7'
Class Method Summary collapse
-
.dump(object, io = nil, **options) ⇒ String, Object
Convert
object
to YAML and dump toio
. -
.dump_file(filename, *objects, mode: 'w', perm: nil, opt: nil, **options) ⇒ Object
Convert
objects
to YAML and dump to a file. -
.dump_stream(*objects, io: nil, stylers: nil, deref_aliases: false, **options) ⇒ String, Object
Convert
objects
to YAML and dump toio
. -
.hierarchy(*objects, **kargs) ⇒ String
Get a visual hierarchy of the levels as a String.
-
.node_class(name) ⇒ Class
Get a Class (constant) from Psych::Nodes.
-
.node_const(class_name, const_name, lenient: true) ⇒ Integer, Object
Get a constant from a Psych::Nodes class (using Psychgus.node_class).
-
.parse(yaml, **kargs) ⇒ Psych::Nodes::Document
Parse
yaml
into a Psych::Nodes::Document. -
.parse_file(filename, fallback: false, mode: 'r:BOM|UTF-8', opt: nil, **kargs) ⇒ Psych::Nodes::Document
Parse a YAML file into a Psych::Nodes::Document.
-
.parse_stream(yaml, filename: nil, stylers: nil, deref_aliases: false, **options, &block) ⇒ Psych::Nodes::Stream
Parse
yaml
into a Psych::Nodes::Stream for one document or for multiple documents in one YAML. -
.parser(stylers: nil, deref_aliases: false, **options) ⇒ Psych::Parser
Create a new styled Psych::Parser for parsing YAML.
Methods included from PsychDropIn
add_builtin_type, add_domain_type, add_tag, load, load_file, load_stream, remove_type, safe_load, to_json
Class Method Details
.dump(object, io = nil, **options) ⇒ String, Object
Convert object
to YAML and dump to io
.
object
, io
, and options
are used like in Psych.dump so can be a drop-in replacement for Psych.
119 120 121 |
# File 'lib/psychgus.rb', line 119 def self.dump(object,io = nil,**) return dump_stream(object,io: io,**) end |
.dump_file(filename, *objects, mode: 'w', perm: nil, opt: nil, **options) ⇒ Object
Convert objects
to YAML and dump to a file.
145 146 147 148 149 150 151 |
# File 'lib/psychgus.rb', line 145 def self.dump_file(filename,*objects,mode: 'w',perm: nil,opt: nil,**) opt = Hash(opt) File.open(filename,mode,perm,**opt) do |file| file.write(dump_stream(*objects,**)) end end |
.dump_stream(*objects, io: nil, stylers: nil, deref_aliases: false, **options) ⇒ String, Object
Convert objects
to YAML and dump to io
.
io
and options
are used like in Psych.dump so can be a drop-in replacement for Psych.
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# File 'lib/psychgus.rb', line 179 def self.dump_stream(*objects,io: nil,stylers: nil,deref_aliases: false,**) # If you call this method with only a Hash that uses symbols as keys, # then options will be set to the Hash, instead of objects. # # For example, the below will be stored in options, not objects: # - dump_stream({coffee: {roast: [],style: []}}) # # This if-statement is guaranteed because dump_stream([]) and dump_stream(nil) # will produce [[]] and [nil], which are not empty. # # dump_stream() w/o any args is the only problem, but resolved w/ [nil]. if objects.empty? objects = .empty? ? [nil] : [] = {} end if io.is_a?(Hash) = io io = nil end if !.empty? OPTIONS_ALIASES.each do |option_alias,actual_option| if .key?(option_alias) && !.key?(actual_option) [actual_option] = [option_alias] end end end visitor = Psych::Visitors::YAMLTree.create( , StyledTreeBuilder.new(*stylers,deref_aliases: deref_aliases) ) if objects.empty? # Else, will throw a cryptic NoMethodError: # psych/tree_builder.rb:in `set_end_location': # undefined method `end_line=' for nil:NilClass (NoMethodError) # # This should never occur because of the if-statement at the top of this method. visitor << nil else objects.each do |object| visitor << object end end return visitor.tree.yaml(io,) end |
.hierarchy(*objects, **kargs) ⇒ String
Get a visual hierarchy of the levels as a String.
This is useful for determining the correct level/position when writing a Styler.
315 316 317 318 319 320 321 |
# File 'lib/psychgus.rb', line 315 def self.hierarchy(*objects,**kargs) styler = Stylers::HierarchyStyler.new(**kargs) dump_stream(*objects,stylers: styler,**kargs) return styler.to_s end |
.node_class(name) ⇒ Class
Get a Class (constant) from Psych::Nodes.
Some names have aliases:
:doc => :document
:map => :mapping
:seq => :sequence
55 56 57 58 59 60 61 62 |
# File 'lib/psychgus.rb', line 55 def self.node_class(name) name = name.to_sym.capitalize actual_name = NODE_CLASS_ALIASES[name] name = actual_name unless actual_name.nil? return Psych::Nodes.const_get(name) end |
.node_const(class_name, const_name, lenient: true) ⇒ Integer, Object
Get a constant from a Psych::Nodes class (using node_class).
73 74 75 76 77 78 79 |
# File 'lib/psychgus.rb', line 73 def self.node_const(class_name,const_name,lenient: true) node_class = node_class(class_name) const_name = const_name.to_sym.upcase return 0 if lenient && !node_class.const_defined?(const_name,true) return node_class.const_get(const_name,true) end |
.parse(yaml, **kargs) ⇒ Psych::Nodes::Document
Parse yaml
into a Psych::Nodes::Document.
If you’re just going to call to_ruby(), then using this method is unnecessary, and the styler(s) will do nothing for you.
336 337 338 339 340 341 342 |
# File 'lib/psychgus.rb', line 336 def self.parse(yaml,**kargs) parse_stream(yaml,**kargs) do |node| return node end return false end |
.parse_file(filename, fallback: false, mode: 'r:BOM|UTF-8', opt: nil, **kargs) ⇒ Psych::Nodes::Document
Parse a YAML file into a Psych::Nodes::Document.
If you’re just going to call to_ruby(), then using this method is unnecessary, and the styler(s) will do nothing for you.
362 363 364 365 366 367 368 369 370 |
# File 'lib/psychgus.rb', line 362 def self.parse_file(filename,fallback: false,mode: 'r:BOM|UTF-8',opt: nil,**kargs) opt = Hash(opt) result = File.open(filename,mode,**opt) do |file| parse(file,filename: filename,**kargs) end return result || fallback end |
.parse_stream(yaml, filename: nil, stylers: nil, deref_aliases: false, **options, &block) ⇒ Psych::Nodes::Stream
Parse yaml
into a Psych::Nodes::Stream for one document or for multiple documents in one YAML.
If you’re just going to call to_ruby(), then using this method is unnecessary, and the styler(s) will do nothing for you.
422 423 424 425 426 427 428 429 430 431 432 433 434 435 |
# File 'lib/psychgus.rb', line 422 def self.parse_stream(yaml,filename: nil,stylers: nil,deref_aliases: false,**,&block) if block_given? parser = Psych::Parser.new( StyledDocumentStream.new(*stylers,deref_aliases: deref_aliases,**,&block) ) return parser.parse(yaml,filename) else parser = self.parser(stylers: stylers,deref_aliases: deref_aliases,**) parser.parse(yaml,filename) return parser.handler.root end end |
.parser(stylers: nil, deref_aliases: false, **options) ⇒ Psych::Parser
Create a new styled Psych::Parser for parsing YAML.
477 478 479 |
# File 'lib/psychgus.rb', line 477 def self.parser(stylers: nil,deref_aliases: false,**) return Psych::Parser.new(StyledTreeBuilder.new(*stylers,deref_aliases: deref_aliases,**)) end |