class Psych::Handler

Psych::Handler 是一个抽象基类,它定义了在处理 Psych::Parser 时使用的事件。想要使用 Psych::Parser 的客户端应该实现一个继承自 Psych::Handler 的类,并定义它们可以处理的事件。

Psych::Handler 定义了 Psych::Parser 可能发送给事件处理程序的所有事件。

更多详情请查看 Psych::Parser

常量

EVENTS

Handler 应该响应的事件。

OPTIONS

默认的转储选项

公共实例方法

alias(anchor) 点击切换源代码

当找到对 anchor 的别名时调用。anchor 将是找到的锚点的名称。

示例

这里有一个 YAML 中引用自身的数组的示例

--- &ponies
- first element
- *ponies

&ponies 是锚点,*ponies 是别名。在这种情况下,别名会使用 “ponies” 调用。

# File psych/lib/psych/handler.rb, line 110
def alias anchor
end
empty() 点击切换源代码

当发生空事件时调用。(据我所知,这种情况永远不会发生)。

# File psych/lib/psych/handler.rb, line 236
def empty
end
end_document(implicit) 点击切换源代码

当文档结束时调用。implicit 是一个布尔值,指示文档是否具有隐式结尾。

示例

给定以下 YAML

---
  hello world

implicit 将为 true。给定以下 YAML

---
  hello world
...

implicit 将为 false。

# File psych/lib/psych/handler.rb, line 93
def end_document implicit
end
end_mapping() 点击切换源代码

当映射结束时调用

# File psych/lib/psych/handler.rb, line 230
def end_mapping
end
end_sequence() 点击切换源代码

当序列结束时调用。

# File psych/lib/psych/handler.rb, line 191
def end_sequence
end
end_stream() 点击切换源代码

当 YAML 流结束时调用

# File psych/lib/psych/handler.rb, line 241
def end_stream
end
event_location(start_line, start_column, end_line, end_column) 点击切换源代码

在每个事件之前调用,包含行/列信息。

# File psych/lib/psych/handler.rb, line 246
def event_location(start_line, start_column, end_line, end_column)
end
scalar(value, anchor, tag, plain, quoted, style) 点击切换源代码

当找到标量 value 时调用。标量可能具有 anchortag,或者隐式地为 plain 或隐式地为 quoted

value 是标量的字符串值,anchor 是关联的锚点或 nil,tag 是关联的标签或 nil,plain 是一个布尔值,quoted 是一个布尔值,style 是一个指示字符串样式的整数。

有关 style 的可能值,请参阅 Psych::Nodes::Scalar 中的常量

示例

这是一个 YAML 文档,它演示了此方法可以被调用的各种可能的方式

---
- !str "foo"
- &anchor fun
- many
  lines
- |
  many
  newlines

上面的 YAML 文档包含一个包含四个字符串的列表。以下是按相同顺序发送给此方法的参数

# value               anchor    tag     plain   quoted  style
["foo",               nil,      "!str", false,  false,  3    ]
["fun",               "anchor", nil,    true,   false,  1    ]
["many lines",        nil,      nil,    true,   false,  1    ]
["many\nnewlines\n",  nil,      nil,    false,  true,   4    ]
# File psych/lib/psych/handler.rb, line 150
def scalar value, anchor, tag, plain, quoted, style
end
start_document(version, tag_directives, implicit) 点击切换源代码

当文档开始时调用,包含声明的 versiontag_directives,如果文档是 implicit 的话。

version 将是一个整数数组,指示正在处理的 YAML 版本,tag_directives 是一个元组列表,指示每个标签的前缀和后缀,implicit 是一个布尔值,指示文档是否是隐式启动的。

示例

给定以下 YAML

%YAML 1.1
%TAG ! tag:tenderlovemaking.com,2009:
--- !squee

start_document 的参数必须是这样

version         # => [1, 1]
tag_directives  # => [["!", "tag:tenderlovemaking.com,2009:"]]
implicit        # => false
# File psych/lib/psych/handler.rb, line 72
def start_document version, tag_directives, implicit
end
start_mapping(anchor, tag, implicit, style) 点击切换源代码

当映射开始时调用。

anchor 是与映射关联的锚点或 niltag 是与映射关联的标签或 nilimplicit 是一个布尔值,指示映射是否是隐式开始的。style 是一个整数,指示映射样式。

有关 style 的可能值,请参阅 Psych::Nodes::Mapping 中的常量。

示例

这是一个 YAML 文档,它演示了此方法可以被调用的各种可能的方式

---
k: !!map { hello: world }
v: &pewpew
  hello: world

上面的 YAML 文档由三个映射组成,一个包含两个内部映射的外部映射。以下是按顺序发送的参数的矩阵,用于表示这三个映射

# anchor    tag                       implicit  style
[nil,       nil,                      true,     1     ]
[nil,       "tag:yaml.org,2002:map",  false,    2     ]
["pewpew",  nil,                      true,     1     ]
# File psych/lib/psych/handler.rb, line 225
def start_mapping anchor, tag, implicit, style
end
start_sequence(anchor, tag, implicit, style) 点击切换源代码

当序列开始时调用。

anchor 是与序列关联的锚点或 nil。tag 是与序列关联的标签或 nil。implicit 是一个布尔值,指示序列是否是隐式开始的。style 是一个整数,指示列表样式。

有关 style 的可能值,请参阅 Psych::Nodes::Sequence 中的常量。

示例

这是一个 YAML 文档,它演示了此方法可以被调用的各种可能的方式

---
- !!seq [
  a
]
- &pewpew
  - b

上面的 YAML 文档由三个列表组成,一个包含两个内部列表的外部列表。以下是发送的参数的矩阵,用于表示这些列表

# anchor    tag                       implicit  style
[nil,       nil,                      true,     1     ]
[nil,       "tag:yaml.org,2002:seq",  false,    2     ]
["pewpew",  nil,                      true,     1     ]
# File psych/lib/psych/handler.rb, line 186
def start_sequence anchor, tag, implicit, style
end
start_stream(encoding) 点击切换源代码

当 YAML 流开始时调用,包含 encoding。此方法每个流调用一次。一个流可能包含多个文档。

有关 encoding 的可能值,请参阅 Psych::Parser 中的常量。

# File psych/lib/psych/handler.rb, line 47
def start_stream encoding
end
streaming?() 点击切换源代码

此处理程序是流处理程序吗?

# File psych/lib/psych/handler.rb, line 251
def streaming?
  false
end