From 139ca1d3749520d7c43fd1f3f24f4c63b3f539d7 Mon Sep 17 00:00:00 2001 From: Tharun Date: Sun, 17 May 2020 00:31:12 +0530 Subject: [PATCH 1/9] Updated analytics method name for cask info --- Library/Homebrew/cask/cmd/abstract_command.rb | 2 ++ Library/Homebrew/cask/cmd/info.rb | 1 + Library/Homebrew/utils/analytics.rb | 1 + 3 files changed, 4 insertions(+) diff --git a/Library/Homebrew/cask/cmd/abstract_command.rb b/Library/Homebrew/cask/cmd/abstract_command.rb index 1646ddb943..605bea5e4d 100644 --- a/Library/Homebrew/cask/cmd/abstract_command.rb +++ b/Library/Homebrew/cask/cmd/abstract_command.rb @@ -2,12 +2,14 @@ require_relative "options" require "search" +require "utils" module Cask class Cmd class AbstractCommand include Options include Homebrew::Search + include Utils option "--[no-]binaries", :binaries, true option "--debug", :debug, false diff --git a/Library/Homebrew/cask/cmd/info.rb b/Library/Homebrew/cask/cmd/info.rb index a09291bce0..1f4fd7e90b 100644 --- a/Library/Homebrew/cask/cmd/info.rb +++ b/Library/Homebrew/cask/cmd/info.rb @@ -46,6 +46,7 @@ module Cask def self.info(cask) puts get_info(cask) + Analytics.cask_output(cask) end def self.title_info(cask) diff --git a/Library/Homebrew/utils/analytics.rb b/Library/Homebrew/utils/analytics.rb index eea5d8fe18..40896e5aec 100644 --- a/Library/Homebrew/utils/analytics.rb +++ b/Library/Homebrew/utils/analytics.rb @@ -178,6 +178,7 @@ module Utils puts "#{category}: #{analytics.join(", ")}" unless full_analytics end end + alias cask_output formula_output def custom_prefix_label "custom-prefix" From 2a62be087580762f1589c984f64dd729ed70f036 Mon Sep 17 00:00:00 2001 From: Tharun Date: Sun, 17 May 2020 01:38:11 +0530 Subject: [PATCH 2/9] Refractored analytics to support analytics for cask --- Library/Homebrew/utils/analytics.rb | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/Library/Homebrew/utils/analytics.rb b/Library/Homebrew/utils/analytics.rb index 40896e5aec..54052d6e1a 100644 --- a/Library/Homebrew/utils/analytics.rb +++ b/Library/Homebrew/utils/analytics.rb @@ -147,10 +147,7 @@ module Utils table_output(category, days, results, os_version: os_version, cask_install: cask_install) end - def formula_output(f) - json = formulae_api_json("#{formula_path}/#{f}.json") - return if json.blank? || json["analytics"].blank? - + def get_analytics(json) full_analytics = Homebrew.args.analytics? || Homebrew.args.verbose? ohai "Analytics" @@ -178,7 +175,20 @@ module Utils puts "#{category}: #{analytics.join(", ")}" unless full_analytics end end - alias cask_output formula_output + + def formula_output(f) + json = formulae_api_json("#{formula_path}/#{f}.json") + return if json.blank? || json["analytics"].blank? + + get_analytics(json) + end + + def cask_output(cask) + json = formulae_api_json("#{cask_path}/#{cask}.json") + return if json.blank? || json["analytics"].blank? + + get_analytics(json) + end def custom_prefix_label "custom-prefix" @@ -337,6 +347,10 @@ module Utils "analytics" end alias generic_analytics_path analytics_path + + def cask_path + "cask" + end end end end From 4aba04556eef11391e4ba9e8613c30b8095022a9 Mon Sep 17 00:00:00 2001 From: Tharun Date: Sun, 17 May 2020 02:51:57 +0530 Subject: [PATCH 3/9] Updated tests --- Library/Homebrew/test/cask/cmd/info_spec.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Library/Homebrew/test/cask/cmd/info_spec.rb b/Library/Homebrew/test/cask/cmd/info_spec.rb index 01fd90d27a..160a6efbd9 100644 --- a/Library/Homebrew/test/cask/cmd/info_spec.rb +++ b/Library/Homebrew/test/cask/cmd/info_spec.rb @@ -155,6 +155,8 @@ describe Cask::Cmd::Info, :cask do Docker CE ==> Artifacts Docker.app (App) + ==> Analytics + install: 16,997 (30 days), 54,056 (90 days), 239,482 (365 days) ==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/d0b2c58652ae5eff20a7a4ac93292a08b250912b/Casks/docker.rb. docker: 2.0.0.2-ce-mac81,30215 (auto_updates) https://www.docker.com/community-edition @@ -164,6 +166,8 @@ describe Cask::Cmd::Info, :cask do Docker CE ==> Artifacts Docker.app (App) + ==> Analytics + install: 16,997 (30 days), 54,056 (90 days), 239,482 (365 days) EOS end end From 6e543f7289636a83feb4976c6359a88ace267b85 Mon Sep 17 00:00:00 2001 From: Tharun Date: Mon, 18 May 2020 20:46:43 +0530 Subject: [PATCH 4/9] Updated test with stubing cask analytics call --- Library/Homebrew/test/cask/cmd/info_spec.rb | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/Library/Homebrew/test/cask/cmd/info_spec.rb b/Library/Homebrew/test/cask/cmd/info_spec.rb index 160a6efbd9..32f990110e 100644 --- a/Library/Homebrew/test/cask/cmd/info_spec.rb +++ b/Library/Homebrew/test/cask/cmd/info_spec.rb @@ -2,6 +2,7 @@ require_relative "shared_examples/requires_cask_token" require_relative "shared_examples/invalid_option" +require_relative "../../../utils" describe Cask::Cmd::Info, :cask do it_behaves_like "a command that requires a Cask token" @@ -141,6 +142,24 @@ describe Cask::Cmd::Info, :cask do it "can run be run with a url twice", :needs_network do expect { + Utils::Analytics.formulae_api_json + .should_receive(:endpoint) + .with("test") + .and_return("{ + analytics: { + install: { + 30d: { + docker: 1000 + }, + 90d: { + docker: 2000 + }, + 365d: { + docker: 3000 + } + } + } + }") described_class.run("https://raw.githubusercontent.com/Homebrew/homebrew-cask" \ "/d0b2c58652ae5eff20a7a4ac93292a08b250912b/Casks/docker.rb") described_class.run("https://raw.githubusercontent.com/Homebrew/homebrew-cask" \ From 9e26a451e3c4aa487bad4e6e8e64dd0de9aa79d4 Mon Sep 17 00:00:00 2001 From: Tharun Date: Tue, 19 May 2020 14:58:55 +0530 Subject: [PATCH 5/9] Updated mocking analytics call --- Library/Homebrew/test/cask/cmd/info_spec.rb | 37 ++++++++++----------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/Library/Homebrew/test/cask/cmd/info_spec.rb b/Library/Homebrew/test/cask/cmd/info_spec.rb index 32f990110e..fb4c634393 100644 --- a/Library/Homebrew/test/cask/cmd/info_spec.rb +++ b/Library/Homebrew/test/cask/cmd/info_spec.rb @@ -2,7 +2,7 @@ require_relative "shared_examples/requires_cask_token" require_relative "shared_examples/invalid_option" -require_relative "../../../utils" +require "utils" describe Cask::Cmd::Info, :cask do it_behaves_like "a command that requires a Cask token" @@ -141,25 +141,24 @@ describe Cask::Cmd::Info, :cask do end it "can run be run with a url twice", :needs_network do + expect(Utils::Analytics).to receive(:formulae_brew_sh_json).twice.with("cask/docker.json").and_return( + { + "analytics": { + "install": { + "30d": { + "docker": 1000, + }, + "90d": { + "docker": 2000, + }, + "365d": { + "docker": 3000, + }, + }, + }, + }, + ) expect { - Utils::Analytics.formulae_api_json - .should_receive(:endpoint) - .with("test") - .and_return("{ - analytics: { - install: { - 30d: { - docker: 1000 - }, - 90d: { - docker: 2000 - }, - 365d: { - docker: 3000 - } - } - } - }") described_class.run("https://raw.githubusercontent.com/Homebrew/homebrew-cask" \ "/d0b2c58652ae5eff20a7a4ac93292a08b250912b/Casks/docker.rb") described_class.run("https://raw.githubusercontent.com/Homebrew/homebrew-cask" \ From 7186600a5c3457b384b756269fe6d3fc6521c4b0 Mon Sep 17 00:00:00 2001 From: Tharun Date: Tue, 19 May 2020 14:59:43 +0530 Subject: [PATCH 6/9] renamed get_formulae_api --- Library/Homebrew/utils/analytics.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/utils/analytics.rb b/Library/Homebrew/utils/analytics.rb index 54052d6e1a..ca7669388d 100644 --- a/Library/Homebrew/utils/analytics.rb +++ b/Library/Homebrew/utils/analytics.rb @@ -119,7 +119,7 @@ module Utils def output(filter: nil) days = Homebrew.args.days || "30" category = Homebrew.args.category || "install" - json = formulae_api_json("analytics/#{category}/#{days}d.json") + json = formulae_brew_sh_json("analytics/#{category}/#{days}d.json") return if json.blank? || json["items"].blank? os_version = category == "os-version" @@ -177,14 +177,14 @@ module Utils end def formula_output(f) - json = formulae_api_json("#{formula_path}/#{f}.json") + json = formulae_brew_sh_json("#{formula_path}/#{f}.json") return if json.blank? || json["analytics"].blank? get_analytics(json) end def cask_output(cask) - json = formulae_api_json("#{cask_path}/#{cask}.json") + json = formulae_brew_sh_json("#{cask_path}/#{cask}.json") return if json.blank? || json["analytics"].blank? get_analytics(json) @@ -318,7 +318,7 @@ module Utils end end - def formulae_api_json(endpoint) + def formulae_brew_sh_json(endpoint) return if Homebrew::EnvConfig.no_analytics? || Homebrew::EnvConfig.no_github_api? output, = curl_output("--max-time", "5", From 6a50f31feb8a15feaa784e3b8295eee5fb186cbb Mon Sep 17 00:00:00 2001 From: Tharun Date: Tue, 19 May 2020 17:25:16 +0530 Subject: [PATCH 7/9] fixed proper parsing of mock data for analytics --- Library/Homebrew/test/cask/cmd/info_spec.rb | 25 +++++---------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/Library/Homebrew/test/cask/cmd/info_spec.rb b/Library/Homebrew/test/cask/cmd/info_spec.rb index fb4c634393..bd52d7c0ae 100644 --- a/Library/Homebrew/test/cask/cmd/info_spec.rb +++ b/Library/Homebrew/test/cask/cmd/info_spec.rb @@ -3,6 +3,7 @@ require_relative "shared_examples/requires_cask_token" require_relative "shared_examples/invalid_option" require "utils" +require "json" describe Cask::Cmd::Info, :cask do it_behaves_like "a command that requires a Cask token" @@ -141,23 +142,9 @@ describe Cask::Cmd::Info, :cask do end it "can run be run with a url twice", :needs_network do - expect(Utils::Analytics).to receive(:formulae_brew_sh_json).twice.with("cask/docker.json").and_return( - { - "analytics": { - "install": { - "30d": { - "docker": 1000, - }, - "90d": { - "docker": 2000, - }, - "365d": { - "docker": 3000, - }, - }, - }, - }, - ) + analytics = '{"analytics":{"install":{"30d":{"docker": 1000},"90d":{"docker": 2000},"365d":{"docker": 3000}}}}' + expect(Utils::Analytics).to receive(:formulae_brew_sh_json).twice.with("cask/docker.json") + .and_return(JSON.parse(analytics)) expect { described_class.run("https://raw.githubusercontent.com/Homebrew/homebrew-cask" \ "/d0b2c58652ae5eff20a7a4ac93292a08b250912b/Casks/docker.rb") @@ -174,7 +161,7 @@ describe Cask::Cmd::Info, :cask do ==> Artifacts Docker.app (App) ==> Analytics - install: 16,997 (30 days), 54,056 (90 days), 239,482 (365 days) + install: 1,000 (30 days), 2,000 (90 days), 3,000 (365 days) ==> Downloading https://raw.githubusercontent.com/Homebrew/homebrew-cask/d0b2c58652ae5eff20a7a4ac93292a08b250912b/Casks/docker.rb. docker: 2.0.0.2-ce-mac81,30215 (auto_updates) https://www.docker.com/community-edition @@ -185,7 +172,7 @@ describe Cask::Cmd::Info, :cask do ==> Artifacts Docker.app (App) ==> Analytics - install: 16,997 (30 days), 54,056 (90 days), 239,482 (365 days) + install: 1,000 (30 days), 2,000 (90 days), 3,000 (365 days) EOS end end From 84f2edc884153e4a3ab291e8cc0f75e003de8818 Mon Sep 17 00:00:00 2001 From: Tharun Date: Tue, 19 May 2020 19:35:30 +0530 Subject: [PATCH 8/9] replaced json and used dictionary --- Library/Homebrew/test/cask/cmd/info_spec.rb | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Library/Homebrew/test/cask/cmd/info_spec.rb b/Library/Homebrew/test/cask/cmd/info_spec.rb index bd52d7c0ae..9cd6e22280 100644 --- a/Library/Homebrew/test/cask/cmd/info_spec.rb +++ b/Library/Homebrew/test/cask/cmd/info_spec.rb @@ -3,7 +3,6 @@ require_relative "shared_examples/requires_cask_token" require_relative "shared_examples/invalid_option" require "utils" -require "json" describe Cask::Cmd::Info, :cask do it_behaves_like "a command that requires a Cask token" @@ -142,9 +141,15 @@ describe Cask::Cmd::Info, :cask do end it "can run be run with a url twice", :needs_network do - analytics = '{"analytics":{"install":{"30d":{"docker": 1000},"90d":{"docker": 2000},"365d":{"docker": 3000}}}}' + analytics = { + "analytics" => { + "install" => { + "30d" => { "docker" => 1000 }, "90d" => { "docker" => 2000 }, "365d" => { "docker" => 3000 } + }, + }, + } expect(Utils::Analytics).to receive(:formulae_brew_sh_json).twice.with("cask/docker.json") - .and_return(JSON.parse(analytics)) + .and_return(analytics) expect { described_class.run("https://raw.githubusercontent.com/Homebrew/homebrew-cask" \ "/d0b2c58652ae5eff20a7a4ac93292a08b250912b/Casks/docker.rb") From aeede8374f231f9bfb58dc46e67f6e65f4102777 Mon Sep 17 00:00:00 2001 From: Tharun Date: Tue, 19 May 2020 21:41:02 +0530 Subject: [PATCH 9/9] fixed review changes --- Library/Homebrew/cask/cmd/abstract_command.rb | 2 -- Library/Homebrew/cask/cmd/info.rb | 2 +- Library/Homebrew/test/cask/cmd/info_spec.rb | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Library/Homebrew/cask/cmd/abstract_command.rb b/Library/Homebrew/cask/cmd/abstract_command.rb index 605bea5e4d..1646ddb943 100644 --- a/Library/Homebrew/cask/cmd/abstract_command.rb +++ b/Library/Homebrew/cask/cmd/abstract_command.rb @@ -2,14 +2,12 @@ require_relative "options" require "search" -require "utils" module Cask class Cmd class AbstractCommand include Options include Homebrew::Search - include Utils option "--[no-]binaries", :binaries, true option "--debug", :debug, false diff --git a/Library/Homebrew/cask/cmd/info.rb b/Library/Homebrew/cask/cmd/info.rb index 1f4fd7e90b..e4acbbe56d 100644 --- a/Library/Homebrew/cask/cmd/info.rb +++ b/Library/Homebrew/cask/cmd/info.rb @@ -46,7 +46,7 @@ module Cask def self.info(cask) puts get_info(cask) - Analytics.cask_output(cask) + ::Utils::Analytics.cask_output(cask) end def self.title_info(cask) diff --git a/Library/Homebrew/test/cask/cmd/info_spec.rb b/Library/Homebrew/test/cask/cmd/info_spec.rb index 9cd6e22280..7d529f7112 100644 --- a/Library/Homebrew/test/cask/cmd/info_spec.rb +++ b/Library/Homebrew/test/cask/cmd/info_spec.rb @@ -140,7 +140,7 @@ describe Cask::Cmd::Info, :cask do EOS end - it "can run be run with a url twice", :needs_network do + it "can run be run with a url twice and returns analytics", :needs_network do analytics = { "analytics" => { "install" => {