Class: Pakyow::Presenter::VersionedView
- Inherits:
-
SimpleDelegator
- Object
- SimpleDelegator
- Pakyow::Presenter::VersionedView
- Defined in:
- lib/pakyow/presenter/versioned_view.rb
Overview
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.
Constant Summary collapse
- DEFAULT_VERSION =
:default
Instance Attribute Summary collapse
-
#names ⇒ Object
readonly
Returns the value of attribute names.
Instance Method Summary collapse
-
#initialize(view) ⇒ VersionedView
constructor
A new instance of VersionedView.
- #initialize_dup(_) ⇒ Object
-
#pp(*args) ⇒ Object
Fixes an issue using pp inside a delegator.
- #soft_copy ⇒ Object private
-
#use(version) ⇒ Object
Uses the view matching
version
, removing all other versions. - #used? ⇒ Boolean
-
#version?(version) ⇒ Boolean
Returns true if
version
exists. -
#versioned(version) ⇒ Object
Returns the view matching
version
. - #versions ⇒ Object
Constructor Details
#initialize(view) ⇒ VersionedView
Returns a new instance of VersionedView.
15 16 17 18 19 |
# 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 |
Instance Attribute Details
#names ⇒ Object (readonly)
Returns the value of attribute names.
13 14 15 |
# File 'lib/pakyow/presenter/versioned_view.rb', line 13 def names @names end |
Instance Method Details
#initialize_dup(_) ⇒ Object
21 22 23 24 25 |
# File 'lib/pakyow/presenter/versioned_view.rb', line 21 def initialize_dup(_) super @names = @names.map(&:dup) end |
#pp(*args) ⇒ Object
Fixes an issue using pp inside a delegator.
81 82 83 |
# File 'lib/pakyow/presenter/versioned_view.rb', line 81 def pp(*args) Kernel.pp(*args) end |
#soft_copy ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
28 29 30 31 32 33 34 |
# 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) ⇒ Object
Uses the view matching version
, removing all other versions.
54 55 56 57 58 59 60 61 62 63 64 65 |
# 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? ⇒ Boolean
67 68 69 70 71 |
# File 'lib/pakyow/presenter/versioned_view.rb', line 67 def used? __getobj__.object.internal_nodes.any? { |node| node.labeled?(:versioned) } end |
#version?(version) ⇒ Boolean
Returns true if version
exists.
38 39 40 |
# File 'lib/pakyow/presenter/versioned_view.rb', line 38 def version?(version) !!version_named(version.to_sym) end |
#versioned(version) ⇒ Object
Returns the view matching version
.
44 45 46 47 48 49 50 |
# 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 ⇒ Object
73 74 75 76 77 |
# File 'lib/pakyow/presenter/versioned_view.rb', line 73 def versions __getobj__.object.nodes.map { |node| View.from_object(node) } end |