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