From e50e3e4b2287cc6fe6ef0d4cf4054e3c8ccf9adf Mon Sep 17 00:00:00 2001 From: souleater7 <56251694+souleater7@users.noreply.github.com> Date: Fri, 1 Jan 2021 10:16:31 -0800 Subject: [PATCH 1/3] Delete references to devel --- Library/Homebrew/cli/args.rbi | 3 -- Library/Homebrew/cmd/fetch.rb | 4 --- Library/Homebrew/dev-cmd/test.rb | 3 -- Library/Homebrew/rubocops/lines.rb | 5 ++- Library/Homebrew/test/rubocops/urls_spec.rb | 32 +++---------------- .../test/support/fixtures/receipt.json | 1 - Library/Homebrew/test/version_spec.rb | 2 +- Library/Homebrew/version.rb | 1 - completions/bash/brew | 7 ++-- completions/fish/brew.fish | 17 +++------- completions/zsh/_brew | 24 +++++++------- docs/Manpage.md | 4 --- manpages/brew.1 | 8 ----- 13 files changed, 25 insertions(+), 86 deletions(-) diff --git a/Library/Homebrew/cli/args.rbi b/Library/Homebrew/cli/args.rbi index 9d4f99b8b5ab0..6e90df21b6ff2 100644 --- a/Library/Homebrew/cli/args.rbi +++ b/Library/Homebrew/cli/args.rbi @@ -3,9 +3,6 @@ module Homebrew module CLI class Args < OpenStruct - sig { returns(T.nilable(T::Boolean)) } - def devel?; end - sig { returns(T.nilable(T::Boolean)) } def HEAD?; end diff --git a/Library/Homebrew/cmd/fetch.rb b/Library/Homebrew/cmd/fetch.rb index b8358cc2bc24d..3241fe11d7ce0 100644 --- a/Library/Homebrew/cmd/fetch.rb +++ b/Library/Homebrew/cmd/fetch.rb @@ -24,8 +24,6 @@ def fetch_args EOS switch "--HEAD", description: "Fetch HEAD version instead of stable version." - switch "--devel", - description: "Fetch development version instead of stable version." switch "-f", "--force", description: "Remove a previously cached version and re-fetch." switch "-v", "--verbose", @@ -53,10 +51,8 @@ def fetch_args description: "Treat all named arguments as casks." conflicts "--formula", "--cask" - conflicts "--devel", "--HEAD" conflicts "--build-from-source", "--build-bottle", "--force-bottle" conflicts "--cask", "--HEAD" - conflicts "--cask", "--devel" conflicts "--cask", "--deps" conflicts "--cask", "-s" conflicts "--cask", "--build-bottle" diff --git a/Library/Homebrew/dev-cmd/test.rb b/Library/Homebrew/dev-cmd/test.rb index 8933ec8ae12b0..b45cd1dfab54d 100644 --- a/Library/Homebrew/dev-cmd/test.rb +++ b/Library/Homebrew/dev-cmd/test.rb @@ -23,8 +23,6 @@ def test_args *Example:* `brew install jruby && brew test jruby` EOS - switch "--devel", - description: "Test the development version of a formula." switch "--HEAD", description: "Test the head version of a formula." switch "--keep-tmp", @@ -32,7 +30,6 @@ def test_args switch "--retry", description: "Retry if a testing fails." - conflicts "--devel", "--HEAD" min_named :formula end end diff --git a/Library/Homebrew/rubocops/lines.rb b/Library/Homebrew/rubocops/lines.rb index 011be2921827c..d3de64bbac1d1 100644 --- a/Library/Homebrew/rubocops/lines.rb +++ b/Library/Homebrew/rubocops/lines.rb @@ -473,10 +473,9 @@ def audit_formula(_node, _class_node, _parent_class_node, body_node) end find_instance_method_call(body_node, "ARGV", :include?) do |method| - param = parameters(method).first - next unless match = regex_match_group(param, /^--(HEAD|devel)/) + next unless parameters_passed?(method, "--HEAD") - problem "Use \"if build.#{match[1].downcase}?\" instead" + problem "Use \"if build.head?\" instead" end find_const(body_node, "MACOS_VERSION") do diff --git a/Library/Homebrew/test/rubocops/urls_spec.rb b/Library/Homebrew/test/rubocops/urls_spec.rb index 7e884bc71b846..e55298094fff1 100644 --- a/Library/Homebrew/test/rubocops/urls_spec.rb +++ b/Library/Homebrew/test/rubocops/urls_spec.rb @@ -211,18 +211,18 @@ class Foo < Formula end end - it "with offenses in stable/devel/head block" do + it "with offenses in stable/head block" do expect_offense(<<~RUBY) class Foo < Formula desc "foo" url "https://foo.com" - devel do + stable do url "git://github.com/foo.git", ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Please use https:// for git://github.com/foo.git - :tag => "v1.0.0-alpha.1", + :tag => "v1.0.1", :revision => "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" - version "1.0.0-alpha.1" + version "1.0.1" end end RUBY @@ -380,18 +380,6 @@ class Foo < Formula RUBY end - it "reports no offenses with missing arguments in `devel`" do - expect_no_offenses(<<~RUBY, "/homebrew-core/") - class Foo < Formula - desc "foo" - url "https://foo.com" - devel do - url "https://github.com/foo/bar.git" - end - end - RUBY - end - it "reports no offenses for non-core taps" do expect_no_offenses(<<~RUBY) class Foo < Formula @@ -477,18 +465,6 @@ class Foo < Formula RUBY end - it "reports no offenses with missing arguments in `devel`" do - expect_no_offenses(<<~RUBY, "/homebrew-core/") - class Foo < Formula - desc "foo" - url "https://foo.com" - devel do - url "https://github.com/foo/bar.git" - end - end - RUBY - end - it "reports no offenses for non-core taps" do expect_no_offenses(<<~RUBY) class Foo < Formula diff --git a/Library/Homebrew/test/support/fixtures/receipt.json b/Library/Homebrew/test/support/fixtures/receipt.json index a57d6d80d2753..7fd64acc0f78f 100644 --- a/Library/Homebrew/test/support/fixtures/receipt.json +++ b/Library/Homebrew/test/support/fixtures/receipt.json @@ -31,7 +31,6 @@ "spec": "stable", "versions": { "stable": "2.14", - "devel": "2.15", "head": "HEAD-0000000" } } diff --git a/Library/Homebrew/test/version_spec.rb b/Library/Homebrew/test/version_spec.rb index ab18e0c6460b4..d828d766ed077 100644 --- a/Library/Homebrew/test/version_spec.rb +++ b/Library/Homebrew/test/version_spec.rb @@ -615,7 +615,7 @@ .to be_detected_from("https://brew.sh/dada-v2017-04-17.tar.gz") end - specify "devel spec version style" do + specify "unstable version style" do expect(described_class.create("1.3.0-beta.1")) .to be_detected_from("https://registry.npmjs.org/@angular/cli/-/cli-1.3.0-beta.1.tgz") expect(described_class.create("2.074.0-beta1")) diff --git a/Library/Homebrew/version.rb b/Library/Homebrew/version.rb index c3c86456ac405..d7eebf74c7c1c 100644 --- a/Library/Homebrew/version.rb +++ b/Library/Homebrew/version.rb @@ -412,7 +412,6 @@ def self._parse(spec, detected_from_url:) m = /[-_](\d+\.\d+(?:\.\d+)?(?:-\d+)?)[-_.](?:i[36]86|x86|x64(?:[-_](?:32|64))?)$/.match(stem) return m.captures.first unless m.nil? - # devel spec # e.g. https://registry.npmjs.org/@angular/cli/-/cli-1.3.0-beta.1.tgz # e.g. https://github.com/dlang/dmd/archive/v2.074.0-beta1.tar.gz # e.g. https://github.com/dlang/dmd/archive/v2.074.0-rc1.tar.gz diff --git a/completions/bash/brew b/completions/bash/brew index 887acc5ddc82f..cf9ee23172550 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -227,7 +227,7 @@ _brew_fetch() { -*) __brewcomp " --deps --force - --devel --HEAD + --HEAD --build-from-source --force-bottle --build-bottle --retry $(brew options --compact "$prv" 2>/dev/null) @@ -268,12 +268,11 @@ _brew_install() { -*) if __brewcomp_words_include "--interactive" then - __brewcomp "--devel --git --HEAD" + __brewcomp "--git --HEAD" else __brewcomp " --build-from-source --build-bottle --force-bottle --debug - --devel --HEAD --ignore-dependencies --interactive @@ -604,7 +603,7 @@ _brew_uses() { local cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in -*) - __brewcomp "--installed --recursive --include-build --include-test --include-optional --skip-recommended --devel --HEAD" + __brewcomp "--installed --recursive --include-build --include-test --include-optional --skip-recommended --HEAD" return ;; esac diff --git a/completions/fish/brew.fish b/completions/fish/brew.fish index c45e5954858e3..46ac806ead380 100644 --- a/completions/fish/brew.fish +++ b/completions/fish/brew.fish @@ -322,9 +322,7 @@ __fish_brew_complete_arg 'fetch' -l deps -d "Also download dependen __fish_brew_complete_arg 'fetch' -l build-from-source -d "Fetch source package instead of bottle" __fish_brew_complete_arg 'fetch' -s v -l verbose -d "Do a verbose VCS checkout" __fish_brew_complete_arg 'fetch' -l retry -d "Retry if a download fails or re-download if the checksum has changed" -# --HEAD and --devel are mutually exclusive: -__fish_brew_complete_arg 'fetch; and not __fish_brew_opt --devel --HEAD' -l devel -d "Download the development version from a VCS" -__fish_brew_complete_arg 'fetch; and not __fish_brew_opt --devel --HEAD' -l HEAD -d "Download the HEAD version from a VCS" +__fish_brew_complete_arg 'fetch' -l HEAD -d "Download the HEAD version from a VCS" # --build-from-source and --force-bottle are mutually exclusive: __fish_brew_complete_arg 'fetch; and not __fish_brew_opt --force-bottle' -s s -l build-from-source -d "Download the source rather than a bottle" __fish_brew_complete_arg 'fetch; and not __fish_brew_opt --build-from-source -s' -l force-bottle -d "Download a bottle if it exists" @@ -386,9 +384,7 @@ __fish_brew_complete_arg 'install upgrade' -l cc -d "Attempt to compile using th __fish_brew_complete_arg 'install upgrade; and not __fish_brew_opt --force-bottle' -s s -l build-from-source -d "Compile the formula from source" # FIXME: -s misbehaves allowing --force-bottle __fish_brew_complete_arg 'install upgrade; and not __fish_brew_opt -s --build-from-source' -l force-bottle -d "Install from a bottle if it exists" -# --HEAD and --devel are mutually exclusive: -__fish_brew_complete_arg 'install upgrade; and not __fish_brew_opt --devel --HEAD' -l devel -d "Install the development version" -__fish_brew_complete_arg 'install upgrade; and not __fish_brew_opt --devel --HEAD' -l HEAD -d "Install the HEAD version" +__fish_brew_complete_arg 'install upgrade' -l HEAD -d "Install the HEAD version" __fish_brew_complete_arg 'install upgrade' -l keep-tmp -d "Keep temp files created during installation" __fish_brew_complete_arg 'install upgrade' -l build-bottle -d "Prepare the formula for eventual bottling during installation" __fish_brew_complete_arg 'install upgrade' -s i -l interactive -d "Download and patch formula, then open a shell" @@ -596,9 +592,7 @@ __fish_brew_complete_arg 'uses' -l recursive -d "Resolve more than one level of __fish_brew_complete_arg 'uses' -l include-build -d "Include the :build type dependencies" __fish_brew_complete_arg 'uses' -l include-optional -d "Include the :optional type dependencies" __fish_brew_complete_arg 'uses' -l skip-recommended -d "Skip :recommended type dependencies" -# --HEAD and --devel are mutually exclusive: -__fish_brew_complete_arg 'uses; and not __fish_brew_opt --devel --HEAD' -l devel -d "Find cases development builds using formulae" -__fish_brew_complete_arg 'uses; and not __fish_brew_opt --devel --HEAD' -l HEAD -d "Find cases HEAD builds using formulae" +__fish_brew_complete_arg 'uses' -l HEAD -d "Find cases HEAD builds using formulae" __fish_brew_complete_cmd '--cache' "Display Homebrew/formula's cache location" @@ -666,7 +660,6 @@ __fish_brew_complete_arg 'bottle; and __fish_brew_opt --write' -l no-commit -d " __fish_brew_complete_cmd 'bump-formula-pr' "Create a pull request to update formula with a new URL or tag" # FIXME: should it suggest all/installed formulae or only files with a cetain name? __fish_brew_complete_arg 'bump-formula-pr' -a '(__fish_brew_suggest_formulae_all)' -__fish_brew_complete_arg 'bump-formula-pr' -l devel -d "Bump the development version instead of stable" __fish_brew_complete_arg 'bump-formula-pr' -s n -l dry-run -d "Show what would be done" # --write depends on --dry-run: __fish_brew_complete_arg 'bump-formula-pr; and __fish_brew_opt -n --dry-run' -l write -d "Write changes but not commit them" @@ -742,9 +735,7 @@ __fish_brew_complete_cmd 'test' "Run tests for given formula" __fish_brew_complete_arg 'test' -a '(__fish_brew_suggest_formulae_installed)' __fish_brew_complete_arg 'test' -s d -l debug -d "Test with an interative debugger" __fish_brew_complete_arg 'test' -l keep-tmp -d "Don't delete temp files created for the test" -# --HEAD and --devel are mutually exclusive: -__fish_brew_complete_arg 'test; and not __fish_brew_opt --devel --HEAD' -l devel -d "Test the development version" -__fish_brew_complete_arg 'test; and not __fish_brew_opt --devel --HEAD' -l HEAD -d "Test the HEAD version" +__fish_brew_complete_arg 'test' -l HEAD -d "Test the HEAD version" __fish_brew_complete_cmd 'tests' "Run Homebrew's unit and integration tests" diff --git a/completions/zsh/_brew b/completions/zsh/_brew index 3e81da562402f..49bf2db6e026c 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -248,11 +248,10 @@ _brew_bottle() { '--write' } -# brew bump-formula-pr [--devel] [--dry-run] [--audit|--strict] --url=url --sha256=sha-256 formula -# brew bump-formula-pr [--devel] [--dry-run] [--audit|--strict] --tag=tag --revision=revision formula +# brew bump-formula-pr [--dry-run] [--audit|--strict] --url=url --sha256=sha-256 formula +# brew bump-formula-pr [--dry-run] [--audit|--strict] --tag=tag --revision=revision formula _brew_bump_formula_pr() { _arguments \ - '--devel[bump the development rather than stable version]' \ '--dry-run[print what would be done rather than doing it]' \ '(--strict)--audit[run brew audit before opening the PR]' \ '(--audit)--strict[run brew audit --strict before opening the PR]' \ @@ -385,15 +384,14 @@ _brew_edit() { '*:: :__brew_formulae_or_ruby_files' } -# brew fetch [--force] [--retry] [-v] [--devel|--HEAD] [--deps] +# brew fetch [--force] [--retry] [-v] [--HEAD] [--deps] # [--build-from-source|--build-bottle|--force-bottle] formulae _brew_fetch() { _arguments \ '(--force -f)'{--force,-f}'[remove previously cached version and re-fetch]' \ '--retry[retry if a download fails or re-download if the checksum of a previously cached version no longer matches]' \ '(--verbose -v)'{--verbose,-v}'[verbose VCS checkout]' \ - '(--HEAD)--devel[fetch devel version instead of stable]' \ - '(--devel)--HEAD[fetch HEAD version instead of stable]' \ + '--HEAD[fetch HEAD version instead of stable]' \ '--deps[also download dependencies for any listed formulae]' \ '(--build-from-source -s --force-bottle --build-bottle)'{--build-from-source,-s}'[download the source rather than a bottle]' \ '(--build-from-source -s --force-bottle)--build-bottle[download the source (for eventual bottling) rather than a bottle]' \ @@ -444,7 +442,7 @@ _brew_info() { # brew install [--debug] [--env=std|super] # [--ignore-dependencies|--only-dependencies] [--include-test] # [--cc=compiler] [--build-from-source|--build-bottle|--force-fottle] -# [--devel|--HEAD] [--fetch-HEAD] [--bottle-arch=architecture] [--keep-tmp] formulae +# [--HEAD] [--fetch-HEAD] [--bottle-arch=architecture] [--keep-tmp] formulae # brew install --interactive [--git] formula _brew_install() { local state @@ -459,7 +457,7 @@ _brew_install() { '(--build-from-source -s --force-bottle)--build-bottle[prepare the formula for eventual bottling during installation, skipping any post-install steps]' \ '(--build-from-source -s --build-bottle)--force-bottle[install from a bottle if it exists for the current version of OS X, even if it would not normally be used for installation]' \ '--include-test[install testing dependencies]' \ - '(--devel --HEAD)'{--devel,--HEAD}'[install the development / HEAD version]' \ + '--HEAD[install the HEAD version]' \ '--fetch-HEAD[fetch the upstream repository to detect if the HEAD installation of the formula is outdated]' \ '--bottle-arch=-[optimise bottles for the specified architecture]:architecture: ' \ '--keep-tmp[don''t delete temporary files created during installation]' \ @@ -723,10 +721,10 @@ _brew_tap_readme() { ':name: ' } -# brew test [--devel|--HEAD] [--debug] [--keep-tmp] formulae: +# brew test [--HEAD] [--debug] [--keep-tmp] formulae: _brew_test() { _arguments \ - '(--devel --HEAD)'{--devel,--HEAD}'[use the development / head version of the formula]' \ + '--HEAD[use the head version of the formula]' \ '--debug[launch an interactive debugger if test fails]' \ '--keep-tmp[don''t delete temporary files]' \ '*:formula:__brew_formulae_or_ruby_files' @@ -838,7 +836,7 @@ _brew_upgrade() { '--cc=-[attempt to compile using compiler]:compiler: ' \ '(--build-from-source -s --force-bottle)'{--build-from-source,-s}'[compile the specified formula from source even if a bottle is provided]' \ '(--build-from-source -s)--force-bottle[install from a bottle if it exists for the current version of OS X, even if it would not normally be used for installation]' \ - '(--devel --HEAD)'{--devel,--HEAD}'[install the development / HEAD version]' \ + '--HEAD[install the HEAD version]' \ '--keep-tmp[don''t delete temporary files created during installation]' \ '--display-times[display installation times at end of run]' \ '*: : __brew_outdated_formulae' \ @@ -850,7 +848,7 @@ _brew_upgrade() { } # brew uses [--installed] [--recursive] [--include-build] [--include-optional] -# [--skip-recommended] [--devel|--HEAD] formulae: +# [--skip-recommended] [--HEAD] formulae: _brew_uses() { _arguments \ '--installed[only list installed formulae]' \ @@ -858,7 +856,7 @@ _brew_uses() { '--include-build[include the :build type dependencies]' \ '--include-optional[include the :optional dependencies]' \ '--skip-recommended[skip :recommended type dependencies]' \ - '(--devel --HEAD)'{--devel,--HEAD}'[find cases where formula is used by development / HEAD build]' \ + '--HEAD[find cases where formula is used by HEAD build]' \ '*:formula:__brew_formulae' } diff --git a/docs/Manpage.md b/docs/Manpage.md index fdfbea2e7cc24..851b1e9777538 100644 --- a/docs/Manpage.md +++ b/docs/Manpage.md @@ -167,8 +167,6 @@ and binaries for *`cask`*s. For files, also print SHA-256 checksums. * `--HEAD`: Fetch HEAD version instead of stable version. -* `--devel`: - Fetch development version instead of stable version. * `-f`, `--force`: Remove a previously cached version and re-fetch. * `-v`, `--verbose`: @@ -1277,8 +1275,6 @@ user if something is wrong with the installed formula. *Example:* `brew install jruby && brew test jruby` -* `--devel`: - Test the development version of a formula. * `--HEAD`: Test the head version of a formula. * `--keep-tmp`: diff --git a/manpages/brew.1 b/manpages/brew.1 index d4a0d8010c09d..7225af07beeb0 100644 --- a/manpages/brew.1 +++ b/manpages/brew.1 @@ -194,10 +194,6 @@ Download a bottle (if available) or source packages for \fIformula\fRe and binar Fetch HEAD version instead of stable version\. . .TP -\fB\-\-devel\fR -Fetch development version instead of stable version\. -. -.TP \fB\-f\fR, \fB\-\-force\fR Remove a previously cached version and re\-fetch\. . @@ -1768,10 +1764,6 @@ Run the test method provided by an installed formula\. There is no standard outp \fIExample:\fR \fBbrew install jruby && brew test jruby\fR . .TP -\fB\-\-devel\fR -Test the development version of a formula\. -. -.TP \fB\-\-HEAD\fR Test the head version of a formula\. . From d57c7153e2b855831932cd1a3d6154875ec07fd3 Mon Sep 17 00:00:00 2001 From: souleater7 <56251694+souleater7@users.noreply.github.com> Date: Mon, 4 Jan 2021 15:48:23 -0800 Subject: [PATCH 2/3] Delete outdated references to HEAD --- completions/bash/brew | 2 +- completions/fish/brew.fish | 1 - completions/zsh/_brew | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/completions/bash/brew b/completions/bash/brew index cf9ee23172550..74d07fc412e90 100644 --- a/completions/bash/brew +++ b/completions/bash/brew @@ -603,7 +603,7 @@ _brew_uses() { local cur="${COMP_WORDS[COMP_CWORD]}" case "$cur" in -*) - __brewcomp "--installed --recursive --include-build --include-test --include-optional --skip-recommended --HEAD" + __brewcomp "--installed --recursive --include-build --include-test --include-optional --skip-recommended" return ;; esac diff --git a/completions/fish/brew.fish b/completions/fish/brew.fish index 46ac806ead380..563dd64ab2c02 100644 --- a/completions/fish/brew.fish +++ b/completions/fish/brew.fish @@ -592,7 +592,6 @@ __fish_brew_complete_arg 'uses' -l recursive -d "Resolve more than one level of __fish_brew_complete_arg 'uses' -l include-build -d "Include the :build type dependencies" __fish_brew_complete_arg 'uses' -l include-optional -d "Include the :optional type dependencies" __fish_brew_complete_arg 'uses' -l skip-recommended -d "Skip :recommended type dependencies" -__fish_brew_complete_arg 'uses' -l HEAD -d "Find cases HEAD builds using formulae" __fish_brew_complete_cmd '--cache' "Display Homebrew/formula's cache location" diff --git a/completions/zsh/_brew b/completions/zsh/_brew index 49bf2db6e026c..9ecd07a340398 100644 --- a/completions/zsh/_brew +++ b/completions/zsh/_brew @@ -848,7 +848,7 @@ _brew_upgrade() { } # brew uses [--installed] [--recursive] [--include-build] [--include-optional] -# [--skip-recommended] [--HEAD] formulae: +# [--skip-recommended] formulae: _brew_uses() { _arguments \ '--installed[only list installed formulae]' \ @@ -856,7 +856,6 @@ _brew_uses() { '--include-build[include the :build type dependencies]' \ '--include-optional[include the :optional dependencies]' \ '--skip-recommended[skip :recommended type dependencies]' \ - '--HEAD[find cases where formula is used by HEAD build]' \ '*:formula:__brew_formulae' } From 98e7538679d26d37fdbde568210915527de3d4f0 Mon Sep 17 00:00:00 2001 From: souleater7 <56251694+souleater7@users.noreply.github.com> Date: Tue, 5 Jan 2021 15:22:26 -0800 Subject: [PATCH 3/3] Fix style test in lines_spec.rb --- Library/Homebrew/test/rubocops/lines_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/test/rubocops/lines_spec.rb b/Library/Homebrew/test/rubocops/lines_spec.rb index dd51cf5e89d65..8abd8ea169d5e 100644 --- a/Library/Homebrew/test/rubocops/lines_spec.rb +++ b/Library/Homebrew/test/rubocops/lines_spec.rb @@ -1387,8 +1387,8 @@ class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' test do head = ARGV.include? "--HEAD" - ^^^^^^ Use "if build.head?" instead ^^^^ Use build instead of ARGV to check options + ^^^^^^^^^^^^^^^^^^^^^^ Use "if build.head?" instead end end RUBY