class Pakyow::Presenter::VersionedView
Wraps one or more versioned view objects. Provides an interface for manipulating multiple view versions as if they were a single object, picking one to use for presentation.
Constants
- DEFAULT_VERSION
Attributes
names[R]
Public Class Methods
new(view)
click to toggle source
# File lib/pakyow/presenter/versioned_view.rb, line 15 def initialize(view) __setobj__(view) @names = view.object.nodes.map { |node| node.label(:version) } @used = false end
Public Instance Methods
initialize_dup(_)
click to toggle source
Calls superclass method
# File lib/pakyow/presenter/versioned_view.rb, line 21 def initialize_dup(_) super @names = @names.map(&:dup) end
pp(*args)
click to toggle source
Fixes an issue using pp inside a delegator.
# File lib/pakyow/presenter/versioned_view.rb, line 81 def pp(*args) Kernel.pp(*args) end
soft_copy()
click to toggle source
@api private
# File lib/pakyow/presenter/versioned_view.rb, line 28 def soft_copy instance = self.class.allocate instance.__setobj__(__getobj__.soft_copy) instance.instance_variable_set(:@names, @names) instance.instance_variable_set(:@used, @used) instance end
use(version)
click to toggle source
Uses the view matching version
, removing all other versions.
# File lib/pakyow/presenter/versioned_view.rb, line 54 def use(version) version = version.to_sym if node = version_named(version) node.set_label(:versioned, true) cleanup else cleanup(all: true) end self end
used?()
click to toggle source
# File lib/pakyow/presenter/versioned_view.rb, line 67 def used? __getobj__.object.internal_nodes.any? { |node| node.labeled?(:versioned) } end
version?(version)
click to toggle source
Returns true if version
exists.
# File lib/pakyow/presenter/versioned_view.rb, line 38 def version?(version) !!version_named(version.to_sym) end
versioned(version)
click to toggle source
Returns the view matching version
.
# File lib/pakyow/presenter/versioned_view.rb, line 44 def versioned(version) if node = version_named(version.to_sym) View.from_object(node) else nil end end
versions()
click to toggle source
# File lib/pakyow/presenter/versioned_view.rb, line 73 def versions __getobj__.object.nodes.map { |node| View.from_object(node) } end
Private Instance Methods
cleanup(all: false)
click to toggle source
# File lib/pakyow/presenter/versioned_view.rb, line 87 def cleanup(all: false) if all remove else nodes_to_remove = [] __getobj__.object.internal_nodes.each do |node| unless node.is_a?(StringDoc::MetaNode) || node.labeled?(:versioned) nodes_to_remove << node end end nodes_to_remove.each(&:remove) end end
version_named(version)
click to toggle source
# File lib/pakyow/presenter/versioned_view.rb, line 103 def version_named(version) __getobj__.object.internal_nodes.find { |node| version == (node.label(:version) || DEFAULT_VERSION).to_sym } end