Class: Prdigest::ProseRenderer

Inherits:
Object
  • Object
show all
Defined in:
lib/prdigest/prose_renderer.rb

Constant Summary collapse

DISALLOWED_CONTROL_CHARACTERS =
/[\u0000-\u0008\u000B-\u001F\u007F-\u009F]/

Instance Method Summary collapse

Constructor Details

#initialize(limit: 4_096) ⇒ ProseRenderer

Returns a new instance of ProseRenderer.

Raises:

  • (ArgumentError)


9
10
11
12
# File 'lib/prdigest/prose_renderer.rb', line 9

def initialize(limit: 4_096)
  @limit = Integer(limit)
  raise ArgumentError, "limit must be positive" unless @limit.positive?
end

Instance Method Details

#render(value) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/prdigest/prose_renderer.rb', line 14

def render(value)
  text = value.to_s
  if text.match?(/\A[[:space:]]*\z/)
    raise RenderError.new("prose provider output is blank", kind: "prose_render")
  end
  if text.match?(DISALLOWED_CONTROL_CHARACTERS)
    raise RenderError.new(
      "prose provider output contains disallowed control characters",
      kind: "prose_render"
    )
  end

  chunks = text.each_char.each_slice(@limit).map do |characters|
    CGI.escapeHTML(characters.join).freeze
  end
  Renderer::Output.new(chunks.freeze, "rendered")
rescue RenderError
  raise
rescue StandardError => e
  raise RenderError.new("prose rendering failed: #{e.class}", kind: "prose_render")
end