Class: Pakyow::Presenter::VersionedView

Inherits:
SimpleDelegator
  • Object
show all
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

Instance Method Summary collapse

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

#namesObject (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_copyObject

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

Returns:

  • (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.

Returns:

  • (Boolean)


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

#versionsObject



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