From 130b31b55a3ee872096f6f9013dcec0a2b6d3a46 Mon Sep 17 00:00:00 2001 From: Aldrin Bautista Date: Thu, 5 Oct 2017 12:58:48 +0800 Subject: [PATCH 1/2] initial commit of find all --- lib/cheatsheet.rb | 1 + lib/cheatsheet/client.rb | 35 ++++++++++++++++++++++++++++++----- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/lib/cheatsheet.rb b/lib/cheatsheet.rb index 365c693..1dcc2de 100644 --- a/lib/cheatsheet.rb +++ b/lib/cheatsheet.rb @@ -1,6 +1,7 @@ require "cheatsheet/version" require "cheatsheet/client" require "net/http" +require "json" module Cheatsheet diff --git a/lib/cheatsheet/client.rb b/lib/cheatsheet/client.rb index a722d3c..39db1ed 100644 --- a/lib/cheatsheet/client.rb +++ b/lib/cheatsheet/client.rb @@ -1,16 +1,41 @@ + module Cheatsheet class Client SOURCE = "https://raw.githubusercontent.com/rstacruz/cheatsheets/gh-pages/" + FILES_SOURCE = "https://api.github.com/repos/rstacruz/cheatsheets/contents/" def self.fetch(*args) key = args[0].first - uri = URI(SOURCE + key + ".md") - begin - puts self.fetch_raw(uri) - rescue CheatSheetClientException => e - puts e.message + # Show available cheatsheets + if (key === '-a') + files_uri = URI(FILES_SOURCE) + begin + files = JSON.parse(self.fetch_raw(files_uri)) + filter = '' + + if args[0].size > 1 + filter = args[0].last + end + + mds = files.select { |elem| + elem['name'].end_with?(".md") && elem['name'].include?(filter) + }.map { |elem| + elem['name'][0..-4] + } + + puts mds + rescue CheatSheetClientException => e + puts e.message + end + else + uri = URI(SOURCE + key + ".md") + begin + puts self.fetch_raw(uri) + rescue CheatSheetClientException => e + puts e.message + end end end From f4f253734738f25af51b4415ce1ae0985e250dc7 Mon Sep 17 00:00:00 2001 From: aldrin bautista Date: Thu, 5 Oct 2017 16:31:25 +0800 Subject: [PATCH 2/2] made tests work --- bin/cheatsheet | 2 +- lib/cheatsheet/client.rb | 50 +++++++++++++++++++++++++++------------- test/cheatsheet_test.rb | 16 +++++++++++-- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/bin/cheatsheet b/bin/cheatsheet index 9df0813..20c4186 100755 --- a/bin/cheatsheet +++ b/bin/cheatsheet @@ -4,4 +4,4 @@ require "cheatsheet" args = ARGV.clone -Cheatsheet::Client.fetch args +Cheatsheet::Client.start args diff --git a/lib/cheatsheet/client.rb b/lib/cheatsheet/client.rb index 39db1ed..cbba295 100644 --- a/lib/cheatsheet/client.rb +++ b/lib/cheatsheet/client.rb @@ -5,36 +5,50 @@ class Client SOURCE = "https://raw.githubusercontent.com/rstacruz/cheatsheets/gh-pages/" FILES_SOURCE = "https://api.github.com/repos/rstacruz/cheatsheets/contents/" + def self.start(*args) + begin + self.render(self.fetch(*args)) + rescue CheatSheetClientException => e + self.render e + end + end + def self.fetch(*args) key = args[0].first # Show available cheatsheets if (key === '-a') - files_uri = URI(FILES_SOURCE) - begin - files = JSON.parse(self.fetch_raw(files_uri)) - filter = '' - - if args[0].size > 1 - filter = args[0].last - end - + files_uri = URI(FILES_SOURCE) + begin + files = JSON.parse(self.fetch_raw(files_uri)) + filter = '' + + if args[0].size > 1 + filter = args[0].last + end + mds = files.select { |elem| elem['name'].end_with?(".md") && elem['name'].include?(filter) }.map { |elem| - elem['name'][0..-4] - } + File.basename(elem['name'],File.extname(elem['name'])) + } + + if mds.size === 0 + raise CheatSheetClientException.new "We don't have any cheatsheet matching your search query" + end - puts mds - rescue CheatSheetClientException => e - puts e.message + return mds + rescue CheatSheetClientException => e + raise CheatSheetClientException.new e.message + rescue JSON::ParserError + raise CheatSheetClientException.new "Try again later" end else uri = URI(SOURCE + key + ".md") begin - puts self.fetch_raw(uri) + return self.fetch_raw(uri) rescue CheatSheetClientException => e - puts e.message + raise CheatSheetClientException.new e.message end end end @@ -52,6 +66,10 @@ def self.fetch_raw(uri) end end + def self.render(string) + puts string + end + end end diff --git a/test/cheatsheet_test.rb b/test/cheatsheet_test.rb index 7f0c5d7..faa8368 100644 --- a/test/cheatsheet_test.rb +++ b/test/cheatsheet_test.rb @@ -7,11 +7,23 @@ def test_that_it_has_a_version_number end def test_client_success - assert_match /Jollibee/, Cheatsheet::Client.fetch("ph-food-delivery") + assert_match (/Jollibee/), Cheatsheet::Client.fetch(["ph-food-delivery"]) end def test_client_failure - assert_raises(CheatSheetClientException) { Cheatsheet::Client.fetch("us-food-delivery") } + assert_raises(CheatSheetClientException) { Cheatsheet::Client.fetch(["us-food-delivery"]) } + end + + def test_client_search_finds + assert_includes Cheatsheet::Client.fetch(["-a", "xpath"]), 'xpath' + end + + def test_client_search_doesnt_find + assert_raises(CheatSheetClientException) { Cheatsheet::Client.fetch(["-a", "xmen"]) } + end + + def test_client_search_finds_correctly + refute_includes Cheatsheet::Client.fetch(["-a", "xpath"]), 'react' end def test_client_invalid_result