Class: Vedeu::Groups::Group

Inherits:
Object
  • Object
show all
Includes:
Repositories::Model, Toggleable
Defined in:
lib/vedeu/groups/group.rb,
lib/vedeu/groups/repository.rb

Overview

Groups

Instance Attribute Summary collapse

Attributes included from Toggleable

#visible

Attributes included from Repositories::Model

#repository

Instance Method Summary collapse

Methods included from Toggleable

included, #toggle

Methods included from Repositories::Model

included, #store

Constructor Details

#initialize(attributes = {}) ⇒ Vedeu::Groups::Group

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.

Note:

A group being visible or not may not necessarily mean the members are of the same state.

Return a new instance of Vedeu::Groups::Group.

Parameters:

  • attributes (Hash<Symbol => Boolean|Set|String| Vedeu::Groups::Repository]) (defaults to: {})

    ttributes [Hash<Symbol => Boolean|Set|String| Vedeu::Groups::Repository]

Options Hash (attributes):

  • members (Set)

    A collection of names of interfaces belonging to this group.

  • name (String|Symbol)

    The name of the group.

  • repository (Object)
    Vedeu::Repositories::Repository

    The storage for all Group models.

  • visible (Boolean)

    Whether the group is visible or not.



38
39
40
41
42
# File 'lib/vedeu/groups/group.rb', line 38

def initialize(attributes = {})
  defaults.merge!(attributes).each do |key, value|
    instance_variable_set("@#{key}", value)
  end
end

Instance Attribute Details

#nameString

Returns:

  • (String)


19
20
21
# File 'lib/vedeu/groups/group.rb', line 19

def name
  @name
end

Instance Method Details

#add(member) ⇒ Vedeu::Groups::Group

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.

Add a member to the group by name.

Parameters:

  • member (String)

Returns:



48
49
50
51
52
# File 'lib/vedeu/groups/group.rb', line 48

def add(member)
  attrs = attributes.merge!(members: members.add(member))

  Vedeu::Groups::Group.store(attrs)
end

#attributesHash<Symbol => void>

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.

Returns the attributes of the group.

Returns:

  • (Hash<Symbol => void>)


57
58
59
60
61
62
63
64
# File 'lib/vedeu/groups/group.rb', line 57

def attributes
  {
    name:       name,
    members:    members,
    repository: repository,
    visible:    visible,
  }
end

#by_zindexArray<String>

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.

Return the members of the group sorted by the zindex of the members.

Returns:

  • (Array<String>)


70
71
72
# File 'lib/vedeu/groups/group.rb', line 70

def by_zindex
  interfaces.sort_by(&:zindex).map(&:name)
end

#defaultsHash<Symbol => void> (private)

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.

The default options/attributes for a new instance of this class.

Returns:

  • (Hash<Symbol => void>)


164
165
166
167
168
169
170
171
# File 'lib/vedeu/groups/group.rb', line 164

def defaults
  {
    members:    Set.new,
    name:       nil,
    repository: Vedeu.groups,
    visible:    true,
  }
end

#deputy(client = nil) ⇒ Vedeu::Groups::DSL

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.

Returns a DSL instance responsible for defining the DSL methods of this model.

Parameters:

  • client (Object|NilClass) (defaults to: nil)

    The client binding represents the client application object that is currently invoking a DSL method. It is required so that we can send messages to the client application object should we need to.

Returns:



82
83
84
# File 'lib/vedeu/groups/group.rb', line 82

def deputy(client = nil)
  Vedeu::Groups::DSL.new(self, client)
end

#eql?(other) ⇒ Boolean Also known as: ==

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.

An object is equal when its values are the same.

Parameters:

Returns:



90
91
92
93
# File 'lib/vedeu/groups/group.rb', line 90

def eql?(other)
  self.class.equal?(other.class) && name == other.name &&
    members == other.members
end

#hideVedeu::Groups::Group

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.

Note:

The action of showing a group will effectively clear the terminal and show the new group, therefore hiding the group may not be necessary.

Hide the named group of interfaces, or without a name, the group of the currently focussed interface. Useful for hiding part of that which is currently displaying in the terminal.

Examples:

Vedeu.trigger(:_hide_group_, name)
Vedeu.hide_group(name)

Returns:



110
111
112
113
114
115
116
# File 'lib/vedeu/groups/group.rb', line 110

def hide
  super

  @members.each { |member| Vedeu.trigger(:_hide_interface_, member) }

  self
end

#interfacesArray<Vedeu::Interfaces::Interface] (private)

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.

Return the interfaces for all members of the group.

Returns:



176
177
178
# File 'lib/vedeu/groups/group.rb', line 176

def interfaces
  members.map { |name| Vedeu.interfaces.by_name(name) }
end

#membersSet

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.

Return the members of the group.

Returns:

  • (Set)


121
122
123
# File 'lib/vedeu/groups/group.rb', line 121

def members
  @_members ||= Set.new(@members)
end

#remove(member) ⇒ Vedeu::Groups::Group

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.

Remove a member from the group by name.

Parameters:

  • member (String)

Returns:



129
130
131
132
133
# File 'lib/vedeu/groups/group.rb', line 129

def remove(member)
  attrs = attributes.merge!(members: members.delete(member))

  Vedeu::Groups::Group.store(attrs)
end

#reset!Vedeu::Groups::Group Also known as: reset

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.

Remove all members from the group.



138
139
140
141
142
# File 'lib/vedeu/groups/group.rb', line 138

def reset!
  attrs = defaults.merge!(name: name)

  Vedeu::Groups::Group.store(attrs)
end

#showVedeu::Groups::Group

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.

Show the named group of interfaces, or without a name, the group of the currently focussed interface.

Examples:

Vedeu.trigger(:_show_group_, name)
Vedeu.show_group(name)

Returns:



153
154
155
156
157
158
159
# File 'lib/vedeu/groups/group.rb', line 153

def show
  super

  @members.each { |member| Vedeu.trigger(:_show_interface_, member) }

  self
end