Module: Mynu::Dsl::Block

Included in:
Mynu, Menu::BlockMenuItem
Defined in:
lib/mynu/dsl/block.rb

Instance Method Summary collapse

Instance Method Details

#add_item(title, runtime_block, &block) ⇒ Object



71
72
73
74
75
76
# File 'lib/mynu/dsl/block.rb', line 71

def add_item(title, runtime_block, &block)
  item = Menu::BlockMenuItem.new(title, runtime_block)
  item.instance_eval(&block) if block_given?
  @items << item
  item
end

#app(title, app, &block) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/mynu/dsl/block.rb', line 8

def app(title, app, &block)
  block = Proc.new {} unless block_given?
  add_item(
    title, 
    item_block(block) { `open -a #{app}` }
  )
end

#item(title, &block) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/mynu/dsl/block.rb', line 35

def item(title, &block)
  block = Proc.new {} unless block_given?
  add_item(
    title, 
    item_block(block) { }
  )
end

#item_block(original_block, &block) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/mynu/dsl/block.rb', line 78

def item_block(original_block, &block)
  Receivable.new { |sender|
    block.call(sender) if block
    case original_block.arity
      when 0
        sender.instance_eval(&original_block)
      when 1
        original_block.call(sender)
      else
        raise
    end
  }
end


43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/mynu/dsl/block.rb', line 43

def menu(title, &block)
  raise "Block must be provided for a menu" unless block_given?
  add_item(
    title, 
    item_block(Proc.new {}) {}
  ) {
    case block.arity
      when 0
        self.instance_eval(&block)
      when 1
        block.call(self)
      else
        raise
    end

    if self.items.length > 0
      menu = Menu.new
      menu.setAutoenablesItems false

      self.setSubmenu menu

      self.items.each do |item|
        menu.addItem item
      end
    end
  }
end

#open(title, path, &block) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/mynu/dsl/block.rb', line 16

def open(title, path, &block)
  block = Proc.new {} unless block_given?
  add_item(
    title, 
    item_block(block) { `open #{path}` }
  )
end

#separatorObject



4
5
6
# File 'lib/mynu/dsl/block.rb', line 4

def separator
  @items << NSMenuItem.separatorItem
end

#terminal(title, command, options = {}, &block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/mynu/dsl/block.rb', line 24

def terminal(title, command, options={}, &block)
  block = Proc.new {} unless block_given?
  add_item(
    title, 
    item_block(block) {
      terminal = Mynu::Support::Terminal.new
      terminal.create_tab(command, options)
    }
  )
end