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

Methods included from Common

#absent?, #array?, #boolean, #boolean?, #empty_value?, #escape?, #falsy?, #hash?, #line_model?, #numeric?, #positionable?, #present?, #snake_case, #stream_model?, #string?, #symbol?, #truthy?, #view_model?

Constructor Details

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

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.



36
37
38
39
40
# File 'lib/vedeu/groups/group.rb', line 36

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

Instance Attribute Details

#nameString

Returns:

  • (String)


17
18
19
# File 'lib/vedeu/groups/group.rb', line 17

def name
  @name
end

Instance Method Details

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

Add a member to the group by name.

Parameters:

  • member (String)

Returns:



46
47
48
49
50
# File 'lib/vedeu/groups/group.rb', line 46

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

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

#attributesHash<Symbol => void>

Returns the attributes of the group.

Returns:

  • (Hash<Symbol => void>)


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

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

#by_zindexArray<String>

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

Returns:

  • (Array<String>)


68
69
70
# File 'lib/vedeu/groups/group.rb', line 68

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

#defaultsHash<Symbol => void> (private)

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

Returns:

  • (Hash<Symbol => void>)


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

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

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

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:



80
81
82
# File 'lib/vedeu/groups/group.rb', line 80

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

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

An object is equal when its values are the same.

Parameters:

Returns:



88
89
90
91
# File 'lib/vedeu/groups/group.rb', line 88

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

#hideVedeu::Groups::Group

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:



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

def hide
  super

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

  self
end

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

Return the interfaces for all members of the group.

Returns:



174
175
176
# File 'lib/vedeu/groups/group.rb', line 174

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

#membersSet

Return the members of the group.

Returns:

  • (Set)


119
120
121
# File 'lib/vedeu/groups/group.rb', line 119

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

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

Remove a member from the group by name.

Parameters:

  • member (String)

Returns:



127
128
129
130
131
# File 'lib/vedeu/groups/group.rb', line 127

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

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

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

Remove all members from the group.



136
137
138
139
140
# File 'lib/vedeu/groups/group.rb', line 136

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

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

#showVedeu::Groups::Group

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:



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

def show
  super

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

  self
end