From d22c2eca9e4e19785b549d1eeedc933cd91c461a Mon Sep 17 00:00:00 2001 From: Markus Reiter Date: Sun, 27 Jan 2019 21:34:24 +0100 Subject: [PATCH] Refactor `ConflictsWith` to be a `DelegateClass(Hash)`. --- Library/Homebrew/cask/cask.rb | 2 +- Library/Homebrew/cask/dsl/conflicts_with.rb | 29 +++++++++------------ Library/Homebrew/cask/installer.rb | 2 +- Library/Homebrew/test/cask/dsl_spec.rb | 2 +- 4 files changed, 15 insertions(+), 20 deletions(-) diff --git a/Library/Homebrew/cask/cask.rb b/Library/Homebrew/cask/cask.rb index f279630487..38c0ceb09a 100644 --- a/Library/Homebrew/cask/cask.rb +++ b/Library/Homebrew/cask/cask.rb @@ -133,7 +133,7 @@ module Cask end, "caveats" => caveats, "depends_on" => depends_on, - "conflicts_with" => conflicts_with.to_h, + "conflicts_with" => conflicts_with, "container" => container, "auto_updates" => auto_updates, } diff --git a/Library/Homebrew/cask/dsl/conflicts_with.rb b/Library/Homebrew/cask/dsl/conflicts_with.rb index e9db95fd27..2505743a60 100644 --- a/Library/Homebrew/cask/dsl/conflicts_with.rb +++ b/Library/Homebrew/cask/dsl/conflicts_with.rb @@ -1,33 +1,28 @@ +require "extend/hash_validator" +using HashValidator + module Cask class DSL - class ConflictsWith - VALID_KEYS = Set.new [ + class ConflictsWith < DelegateClass(Hash) + VALID_KEYS = [ :formula, :cask, :macos, :arch, :x11, :java, - ] + ].freeze - attr_reader *VALID_KEYS + def initialize(**pairs) + pairs.assert_valid_keys!(*VALID_KEYS) - def initialize(pairs = {}) - @pairs = pairs + super(Hash[pairs.map { |k, v| [k, Set.new([*v])] }]) - VALID_KEYS.each do |key| - instance_variable_set("@#{key}", Set.new) - end - - pairs.each do |key, value| - raise "invalid conflicts_with key: '#{key.inspect}'" unless VALID_KEYS.include?(key) - - instance_variable_set("@#{key}", instance_variable_get("@#{key}").merge([*value])) - end + self.default = Set.new end - def to_h - Hash[VALID_KEYS.map { |key| [key, instance_variable_get("@#{key}").to_a] }] + def to_json(generator) + Hash[map { |k, v| [k, v.to_a] }].to_json(generator) end end end diff --git a/Library/Homebrew/cask/installer.rb b/Library/Homebrew/cask/installer.rb index 0e43cca4fb..407f5a9b39 100644 --- a/Library/Homebrew/cask/installer.rb +++ b/Library/Homebrew/cask/installer.rb @@ -104,7 +104,7 @@ module Cask def check_conflicts return unless @cask.conflicts_with - @cask.conflicts_with.cask.each do |conflicting_cask| + @cask.conflicts_with[:cask].each do |conflicting_cask| begin conflicting_cask = CaskLoader.load(conflicting_cask) if conflicting_cask.installed? diff --git a/Library/Homebrew/test/cask/dsl_spec.rb b/Library/Homebrew/test/cask/dsl_spec.rb index 60a33f951c..0532907f08 100644 --- a/Library/Homebrew/test/cask/dsl_spec.rb +++ b/Library/Homebrew/test/cask/dsl_spec.rb @@ -401,7 +401,7 @@ describe Cask::DSL, :cask do let(:token) { "with-conflicts-with" } it "allows conflicts_with stanza to be specified" do - expect(cask.conflicts_with.formula).not_to be nil + expect(cask.conflicts_with[:formula]).to be_empty end end