class Prawn::SVG::Gradients

Public Class Methods

new(document) click to toggle source
# File lib/prawn/svg/gradients.rb, line 3
def initialize(document)
  @document = document
  @gradients_by_id = {}
end

Public Instance Methods

[](id) click to toggle source
# File lib/prawn/svg/gradients.rb, line 8
def [](id)
  id &&= id.strip
  return unless id && id != ''

  if (element = @gradients_by_id[id])
    element
  elsif (raw_element = find_raw_gradient_element_by_id(id))
    create_gradient_element(raw_element)
  end
end
[]=(id, gradient) click to toggle source
# File lib/prawn/svg/gradients.rb, line 19
def []=(id, gradient)
  @gradients_by_id[id] = gradient
end

Private Instance Methods

create_gradient_element(raw_element) click to toggle source
# File lib/prawn/svg/gradients.rb, line 30
def create_gradient_element(raw_element)
  Elements::Gradient.new(@document, raw_element, [], new_state).tap(&:process)
end
find_raw_element_by_id(id) click to toggle source
# File lib/prawn/svg/gradients.rb, line 34
def find_raw_element_by_id(id)
  REXML::XPath.match(@document.root, %(//*[@id="#{id.gsub('"', '\"')}"])).first
end
find_raw_gradient_element_by_id(id) click to toggle source
# File lib/prawn/svg/gradients.rb, line 25
def find_raw_gradient_element_by_id(id)
  raw_element = find_raw_element_by_id(id)
  raw_element if gradient_element?(raw_element)
end
gradient_element?(raw_element) click to toggle source
# File lib/prawn/svg/gradients.rb, line 38
def gradient_element?(raw_element)
  return false if raw_element.nil? || raw_element.name.nil?

  Elements::TAG_CLASS_MAPPING[raw_element.name.to_sym] == Elements::Gradient
end
new_state() click to toggle source
# File lib/prawn/svg/gradients.rb, line 44
def new_state
  State.new.tap do |state|
    state.viewport_sizing = @document.sizing
  end
end