Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
gram: legal
> ./lib/us_congress/bill_dtd/hierarchy.ex
defmodule UsCongress.BillDtd.Hierarchy do
@moduledoc """
Produce a hierarchical map of nodes,
called "Measures".
A measure can be:
- a `String`
- a `%{scheme: "", ...}`
- a `%{label: "", params: %{}, measure: []}`
During parsing,
measures are commonly merged alongside preceding ones.
The function `UsCongress.BillDtd.Shape.combine/2`
helps manage the rules here.
"""
@behaviour Saxy.Handler
alias UsCongress.BillDtd.Shape
def handle_event(:start_element, {name, attributes}, prior),
do: {:ok, [
%{ label: name, params: attributes |> Map.new, measure: [] }
| prior ]}
def handle_event(:characters, chars,
[%{label: name, measure: measure} = current
| prior] ), do:
{:ok, [Shape.merge(current, chars) | prior]}
def handle_event(:end_element, "header",
[ header, %{scheme: "enum"} = enum
| prior ] ), do:
{:ok, [ Shape.combine(enum, Shape.scheme(header)) | prior]}
def handle_event(:end_element, _name,
[ %{ measure: [_body]} = current,
%{measure: measure } = former
| prior] ), do:
{:ok, [former |> Shape.combine(Shape.scheme(current)) | prior]}
def handle_event(:end_element, _name, [
%{ measure: [_body]} = current,
%{measure: measure} = basis
| prior] ), do:
{:ok, [ Shape.combine(basis, current) | prior ] }
def handle_event(_, _, prior), do: {:ok, prior}
end