mirror of
https://github.com/Homebrew/brew.git
synced 2025-07-14 16:09:03 +08:00
Create dedicated Attrable mixin for attr_ methods
This commit is contained in:
parent
e794b99ea5
commit
ffd761d2e9
32
Library/Homebrew/attrable.rb
Normal file
32
Library/Homebrew/attrable.rb
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# typed: strict
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Attrable
|
||||||
|
sig { params(attrs: Symbol).void }
|
||||||
|
def attr_predicate(*attrs)
|
||||||
|
attrs.each do |attr|
|
||||||
|
define_method attr do
|
||||||
|
instance_variable_get("@#{attr.to_s.sub(/\?$/, "")}") == true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
sig { params(attrs: Symbol).void }
|
||||||
|
def attr_rw(*attrs)
|
||||||
|
attrs.each do |attr|
|
||||||
|
module_eval <<-EOS, __FILE__, __LINE__+1
|
||||||
|
def #{attr}(val=nil) # def prefix(val=nil)
|
||||||
|
if val.nil? # if val.nil?
|
||||||
|
if instance_variable_defined?(:@#{attr}) # if instance_variable_defined?(:@prefix)
|
||||||
|
return @#{attr} # return @prefix
|
||||||
|
else # else
|
||||||
|
return nil # return nil
|
||||||
|
end # end
|
||||||
|
end # end
|
||||||
|
#
|
||||||
|
@#{attr} = val # @prefix = val
|
||||||
|
end # end
|
||||||
|
EOS
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,6 +1,5 @@
|
|||||||
# typed: strict
|
# typed: strict
|
||||||
|
|
||||||
module Predicable
|
module Attrable
|
||||||
include Kernel
|
|
||||||
requires_ancestor { Module }
|
requires_ancestor { Module }
|
||||||
end
|
end
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "active_support/core_ext/object/deep_dup"
|
require "active_support/core_ext/object/deep_dup"
|
||||||
|
|
||||||
module Cask
|
module Cask
|
||||||
@ -13,7 +14,7 @@ module Cask
|
|||||||
abstract!
|
abstract!
|
||||||
|
|
||||||
include Comparable
|
include Comparable
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
def self.english_name
|
def self.english_name
|
||||||
@english_name ||= T.must(name).sub(/^.*:/, "").gsub(/(.)([A-Z])/, '\1 \2')
|
@english_name ||= T.must(name).sub(/^.*:/, "").gsub(/(.)([A-Z])/, '\1 \2')
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "cask/denylist"
|
require "cask/denylist"
|
||||||
require "cask/download"
|
require "cask/download"
|
||||||
require "digest"
|
require "digest"
|
||||||
@ -17,7 +18,7 @@ module Cask
|
|||||||
# @api private
|
# @api private
|
||||||
class Audit
|
class Audit
|
||||||
include ::Utils::Curl
|
include ::Utils::Curl
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
attr_reader :cask, :download
|
attr_reader :cask, :download
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "cask/cask_loader"
|
require "cask/cask_loader"
|
||||||
require "cask/config"
|
require "cask/config"
|
||||||
require "cask/dsl"
|
require "cask/dsl"
|
||||||
@ -14,7 +15,7 @@ module Cask
|
|||||||
# @api private
|
# @api private
|
||||||
class Cask
|
class Cask
|
||||||
extend Forwardable
|
extend Forwardable
|
||||||
extend Predicable
|
extend Attrable
|
||||||
extend APIHashable
|
extend APIHashable
|
||||||
include Metadata
|
include Metadata
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "locale"
|
require "locale"
|
||||||
require "lazy_object"
|
require "lazy_object"
|
||||||
require "livecheck"
|
require "livecheck"
|
||||||
@ -101,7 +102,7 @@ module Cask
|
|||||||
*ARTIFACT_BLOCK_CLASSES.flat_map { |klass| [klass.dsl_key, klass.uninstall_dsl_key] },
|
*ARTIFACT_BLOCK_CLASSES.flat_map { |klass| [klass.dsl_key, klass.uninstall_dsl_key] },
|
||||||
]).freeze
|
]).freeze
|
||||||
|
|
||||||
extend Predicable
|
extend Attrable
|
||||||
include OnSystem::MacOSOnly
|
include OnSystem::MacOSOnly
|
||||||
|
|
||||||
attr_reader :cask, :token, :deprecation_date, :deprecation_reason, :disable_date, :disable_reason
|
attr_reader :cask, :token, :deprecation_date, :deprecation_reason, :disable_date, :disable_reason
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
|
|
||||||
module Cask
|
module Cask
|
||||||
class DSL
|
class DSL
|
||||||
# Class corresponding to the `caveats` stanza.
|
# Class corresponding to the `caveats` stanza.
|
||||||
@ -15,7 +17,7 @@ module Cask
|
|||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
class Caveats < Base
|
class Caveats < Base
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
attr_predicate :discontinued?
|
attr_predicate :discontinued?
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "formula_installer"
|
require "formula_installer"
|
||||||
require "unpack_strategy"
|
require "unpack_strategy"
|
||||||
require "utils/topological_hash"
|
require "utils/topological_hash"
|
||||||
@ -17,7 +18,7 @@ module Cask
|
|||||||
#
|
#
|
||||||
# @api private
|
# @api private
|
||||||
class Installer
|
class Installer
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
def initialize(cask, command: SystemCommand, force: false, adopt: false,
|
def initialize(cask, command: SystemCommand, force: false, adopt: false,
|
||||||
skip_cask_deps: false, binaries: true, verbose: false,
|
skip_cask_deps: false, binaries: true, verbose: false,
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
require "utils/bottles"
|
require "utils/bottles"
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "formula"
|
require "formula"
|
||||||
require "cask/cask_loader"
|
require "cask/cask_loader"
|
||||||
require "set"
|
require "set"
|
||||||
@ -176,7 +177,7 @@ module Homebrew
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
PERIODIC_CLEAN_FILE = (HOMEBREW_CACHE/".cleaned").freeze
|
PERIODIC_CLEAN_FILE = (HOMEBREW_CACHE/".cleaned").freeze
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "mutex_m"
|
require "mutex_m"
|
||||||
require "ignorable"
|
require "ignorable"
|
||||||
|
|
||||||
@ -74,7 +75,7 @@ module Debrew
|
|||||||
@debugged_exceptions = Set.new
|
@debugged_exceptions = Set.new
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
extend Predicable
|
extend Attrable
|
||||||
attr_predicate :active?
|
attr_predicate :active?
|
||||||
attr_reader :debugged_exceptions
|
attr_reader :debugged_exceptions
|
||||||
end
|
end
|
||||||
|
@ -1,24 +1,6 @@
|
|||||||
# typed: true
|
# typed: strict
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class Module
|
class Module
|
||||||
include T::Sig
|
include T::Sig
|
||||||
|
|
||||||
def attr_rw(*attrs)
|
|
||||||
attrs.each do |attr|
|
|
||||||
module_eval <<-EOS, __FILE__, __LINE__+1
|
|
||||||
def #{attr}(val=nil) # def prefix(val=nil)
|
|
||||||
if val.nil? # if val.nil?
|
|
||||||
if instance_variable_defined?(:@#{attr}) # if instance_variable_defined?(:@prefix)
|
|
||||||
return @#{attr} # return @prefix
|
|
||||||
else # else
|
|
||||||
return nil # return nil
|
|
||||||
end # end
|
|
||||||
end # end
|
|
||||||
#
|
|
||||||
@#{attr} = val # @prefix = val
|
|
||||||
end # end
|
|
||||||
EOS
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
# typed: strict
|
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Predicable
|
|
||||||
sig { params(attrs: Symbol).void }
|
|
||||||
def attr_predicate(*attrs)
|
|
||||||
attrs.each do |attr|
|
|
||||||
define_method attr do
|
|
||||||
instance_variable_get("@#{attr.to_s.sub(/\?$/, "")}") == true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "cache_store"
|
require "cache_store"
|
||||||
require "did_you_mean"
|
require "did_you_mean"
|
||||||
require "formula_support"
|
require "formula_support"
|
||||||
@ -66,7 +67,7 @@ class Formula
|
|||||||
include Homebrew::Livecheck::Constants
|
include Homebrew::Livecheck::Constants
|
||||||
extend Forwardable
|
extend Forwardable
|
||||||
extend Cachable
|
extend Cachable
|
||||||
extend Predicable
|
extend Attrable
|
||||||
extend APIHashable
|
extend APIHashable
|
||||||
|
|
||||||
# The name of this {Formula}.
|
# The name of this {Formula}.
|
||||||
@ -2916,7 +2917,7 @@ class Formula
|
|||||||
|
|
||||||
# The methods below define the formula DSL.
|
# The methods below define the formula DSL.
|
||||||
class << self
|
class << self
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
include BuildEnvironment::DSL
|
include BuildEnvironment::DSL
|
||||||
include OnSystem::MacOSAndLinux
|
include OnSystem::MacOSAndLinux
|
||||||
|
@ -28,7 +28,7 @@ require "service"
|
|||||||
# @api private
|
# @api private
|
||||||
class FormulaInstaller
|
class FormulaInstaller
|
||||||
include FormulaCellarChecks
|
include FormulaCellarChecks
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
attr_reader :formula, :bottle_tab_runtime_dependencies
|
attr_reader :formula, :bottle_tab_runtime_dependencies
|
||||||
|
|
||||||
|
@ -135,7 +135,6 @@ require "context"
|
|||||||
require "extend/array"
|
require "extend/array"
|
||||||
require "git_repository"
|
require "git_repository"
|
||||||
require "extend/pathname"
|
require "extend/pathname"
|
||||||
require "extend/predicable"
|
|
||||||
require "cli/args"
|
require "cli/args"
|
||||||
|
|
||||||
require "PATH"
|
require "PATH"
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "dependable"
|
require "dependable"
|
||||||
require "dependency"
|
require "dependency"
|
||||||
require "dependencies"
|
require "dependencies"
|
||||||
@ -163,6 +164,7 @@ class Requirement
|
|||||||
|
|
||||||
class << self
|
class << self
|
||||||
include BuildEnvironment::DSL
|
include BuildEnvironment::DSL
|
||||||
|
extend Attrable
|
||||||
|
|
||||||
attr_reader :env_proc, :build
|
attr_reader :env_proc, :build
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "resource"
|
require "resource"
|
||||||
require "download_strategy"
|
require "download_strategy"
|
||||||
require "checksum"
|
require "checksum"
|
||||||
@ -506,6 +507,7 @@ class Bottle
|
|||||||
end
|
end
|
||||||
|
|
||||||
class BottleSpecification
|
class BottleSpecification
|
||||||
|
extend Attrable
|
||||||
RELOCATABLE_CELLARS = [:any, :any_skip_relocation].freeze
|
RELOCATABLE_CELLARS = [:any, :any_skip_relocation].freeze
|
||||||
|
|
||||||
attr_rw :rebuild
|
attr_rw :rebuild
|
||||||
|
@ -7219,7 +7219,7 @@ class Parlour::Types::Type
|
|||||||
extend ::T::InterfaceWrapper::Helpers
|
extend ::T::InterfaceWrapper::Helpers
|
||||||
end
|
end
|
||||||
|
|
||||||
module Predicable
|
module Attrable
|
||||||
extend ::T::Private::Methods::MethodHooks
|
extend ::T::Private::Methods::MethodHooks
|
||||||
extend ::T::Private::Methods::SingletonMethodHooks
|
extend ::T::Private::Methods::SingletonMethodHooks
|
||||||
end
|
end
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
# typed: true
|
# typed: true
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require "attrable"
|
||||||
require "open3"
|
require "open3"
|
||||||
require "plist"
|
require "plist"
|
||||||
require "shellwords"
|
require "shellwords"
|
||||||
|
|
||||||
require "extend/io"
|
require "extend/io"
|
||||||
require "extend/predicable"
|
|
||||||
|
|
||||||
require "extend/time"
|
require "extend/time"
|
||||||
|
|
||||||
# Class for running sub-processes and capturing their output and exit status.
|
# Class for running sub-processes and capturing their output and exit status.
|
||||||
@ -28,7 +27,7 @@ class SystemCommand
|
|||||||
end
|
end
|
||||||
|
|
||||||
include Context
|
include Context
|
||||||
extend Predicable
|
extend Attrable
|
||||||
|
|
||||||
def self.run(executable, **options)
|
def self.run(executable, **options)
|
||||||
new(executable, **options).run!
|
new(executable, **options).run!
|
||||||
|
Loading…
x
Reference in New Issue
Block a user