Class: Homebrew::Bundle::Dsl Private

Inherits:
Object
  • Object
show all
Defined in:
bundle/dsl.rb

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

Defined Under Namespace

Classes: Entry

Constant Summary collapse

HOMEBREW_TAP_ARGS_REGEX =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

%r{^([\w-]+)/(homebrew-)?([\w-]+)$}
HOMEBREW_CORE_FORMULA_REGEX =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

%r{^homebrew/homebrew/([\w+-.@]+)$}i
HOMEBREW_TAP_FORMULA_REGEX =

This constant is part of a private API. This constant may only be used in the Homebrew/brew repository. Third parties should avoid using this constant if possible, as it may be removed or changed without warning.

%r{^([\w-]+)/([\w-]+)/([\w+-.@]+)$}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path) ⇒ Dsl

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns a new instance of Dsl.



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'bundle/dsl.rb', line 23

def initialize(path)
  @path = path
  @input = path.read
  @entries = []
  @cask_arguments = {}

  begin
    process
  # Want to catch all exceptions for e.g. syntax errors.
  rescue Exception => e # rubocop:disable Lint/RescueException
    error_msg = "Invalid Brewfile: #{e.message}"
    raise RuntimeError, error_msg, e.backtrace
  end
end

Instance Attribute Details

#cask_argumentsObject (readonly)

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



21
22
23
# File 'bundle/dsl.rb', line 21

def cask_arguments
  @cask_arguments
end

#entriesObject (readonly)

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



21
22
23
# File 'bundle/dsl.rb', line 21

def entries
  @entries
end

#inputObject (readonly)

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



21
22
23
# File 'bundle/dsl.rb', line 21

def input
  @input
end

Class Method Details

.pluralize_dependency(installed_count) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



134
135
136
# File 'bundle/dsl.rb', line 134

def self.pluralize_dependency(installed_count)
  (installed_count == 1) ? "dependency" : "dependencies"
end

.sanitize_brew_name(name) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'bundle/dsl.rb', line 106

def self.sanitize_brew_name(name)
  name = name.downcase
  if name =~ HOMEBREW_CORE_FORMULA_REGEX
    Regexp.last_match(1)
  elsif name =~ HOMEBREW_TAP_FORMULA_REGEX
    user = Regexp.last_match(1)
    repo = T.must(Regexp.last_match(2))
    name = Regexp.last_match(3)
    "#{user}/#{repo.sub("homebrew-", "")}/#{name}"
  else
    name
  end
end

.sanitize_cask_name(name) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



129
130
131
132
# File 'bundle/dsl.rb', line 129

def self.sanitize_cask_name(name)
  name = name.split("/").last if name.include?("/")
  name.downcase
end

.sanitize_tap_name(name) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



120
121
122
123
124
125
126
127
# File 'bundle/dsl.rb', line 120

def self.sanitize_tap_name(name)
  name = name.downcase
  if name =~ HOMEBREW_TAP_ARGS_REGEX
    "#{Regexp.last_match(1)}/#{Regexp.last_match(3)}"
  else
    name
  end
end

Instance Method Details

#brew(name, options = {}) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



48
49
50
51
52
53
54
# File 'bundle/dsl.rb', line 48

def brew(name, options = {})
  raise "name(#{name.inspect}) should be a String object" unless name.is_a? String
  raise "options(#{options.inspect}) should be a Hash object" unless options.is_a? Hash

  name = Homebrew::Bundle::Dsl.sanitize_brew_name(name)
  @entries << Entry.new(:brew, name, options)
end

#cask(name, options = {}) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



56
57
58
59
60
61
62
63
64
# File 'bundle/dsl.rb', line 56

def cask(name, options = {})
  raise "name(#{name.inspect}) should be a String object" unless name.is_a? String
  raise "options(#{options.inspect}) should be a Hash object" unless options.is_a? Hash

  options[:full_name] = name
  name = Homebrew::Bundle::Dsl.sanitize_cask_name(name)
  options[:args] = @cask_arguments.merge options.fetch(:args, {})
  @entries << Entry.new(:cask, name, options)
end

#cask_args(args) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



42
43
44
45
46
# File 'bundle/dsl.rb', line 42

def cask_args(args)
  raise "cask_args(#{args.inspect}) should be a Hash object" unless args.is_a? Hash

  @cask_arguments.merge!(args)
end

#go(name) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:



87
88
89
# File 'bundle/dsl.rb', line 87

def go(name)
  @entries << Entry.new(:go, name)
end

#mas(name, options = {}) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



66
67
68
69
70
71
72
# File 'bundle/dsl.rb', line 66

def mas(name, options = {})
  id = options[:id]
  raise "name(#{name.inspect}) should be a String object" unless name.is_a? String
  raise "options[:id](#{id}) should be an Integer object" unless id.is_a? Integer

  @entries << Entry.new(:mas, name, id:)
end

#processObject

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



38
39
40
# File 'bundle/dsl.rb', line 38

def process
  instance_eval(@input, @path.to_s)
end

#tap(name, clone_target = nil, options = {}) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



91
92
93
94
95
96
97
98
99
100
# File 'bundle/dsl.rb', line 91

def tap(name, clone_target = nil, options = {})
  raise "name(#{name.inspect}) should be a String object" unless name.is_a? String
  if clone_target && !clone_target.is_a?(String)
    raise "clone_target(#{clone_target.inspect}) should be nil or a String object"
  end

  options[:clone_target] = clone_target
  name = Homebrew::Bundle::Dsl.sanitize_tap_name(name)
  @entries << Entry.new(:tap, name, options)
end

#vscode(name) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



80
81
82
83
84
# File 'bundle/dsl.rb', line 80

def vscode(name)
  raise "name(#{name.inspect}) should be a String object" unless name.is_a? String

  @entries << Entry.new(:vscode, name)
end

#whalebrew(name) ⇒ Object

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.



74
75
76
77
78
# File 'bundle/dsl.rb', line 74

def whalebrew(name)
  raise "name(#{name.inspect}) should be a String object" unless name.is_a? String

  @entries << Entry.new(:whalebrew, name)
end