Class: Git::Switcher::Menu

Inherits:
Object
  • Object
show all
Defined in:
lib/git/switcher/menu.rb

Defined Under Namespace

Classes: MenuItem, Submenu

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(repo) ⇒ Menu



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/git/switcher/menu.rb', line 35

def initialize(repo)
  @repo = repo

  remote_branches = @repo.branches.find_all(&:remote?)
  local_branches = @repo.branches.find_all(&:local?)

  shortcuts = (1..Float::INFINITY).each

  @submenus = [
    submenu_for('REMOTE BRANCHES', remote_branches, shortcuts),
    submenu_for('LOCAL BRANCHES', local_branches, shortcuts),
    submenu_for('TAGS', @repo.tags, shortcuts),
  ].compact

  @menu_items = @submenus.map(&:menu_items).flatten

  @lookup = Hash[@menu_items.map(&:shortcut).zip(@menu_items)]
end

Class Method Details

.for(repo) ⇒ Object



31
32
33
# File 'lib/git/switcher/menu.rb', line 31

def self.for(repo)
  new(repo)
end

Instance Method Details

#[](shortcut) ⇒ Object



54
55
56
# File 'lib/git/switcher/menu.rb', line 54

def [](shortcut)
  @lookup[shortcut]
end

#default_menu_itemObject



62
63
64
# File 'lib/git/switcher/menu.rb', line 62

def default_menu_item
  head_menu_item&.next
end

#head_menu_itemObject



58
59
60
# File 'lib/git/switcher/menu.rb', line 58

def head_menu_item
  @menu_items.find(&:head?)
end

#to_sObject



66
67
68
# File 'lib/git/switcher/menu.rb', line 66

def to_s
  @submenus.join("\n")
end