hintme 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +7 -10
- data/lib/hintme.rb +10 -8
- data/lib/hintme/api/client.rb +47 -8
- data/lib/hintme/cheatsheet/printer.rb +18 -0
- data/lib/hintme/hinter.rb +63 -0
- data/lib/hintme/version.rb +1 -1
- metadata +4 -3
- data/lib/hintme/markdown_printer.rb +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da1266243ffffddb17e42321392746cf5e67bfb1
|
4
|
+
data.tar.gz: ea29387d3e21e8157e0811f3e37fd4a8e70e5703
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3116a7b1bd76f8ded3728c962c121c4b33e44d9b599227afe482f283aa150500bfa2c240cb8fd6d7c21ec5a52682821454e7c4f4b8cb6798c846900e64974986
|
7
|
+
data.tar.gz: 9f2b82f4d70be720ddfd9f2980777c1f1bb81817f33134c45d5acbb1f2811a7254e021d1ceec2ab601a42ce72d5028c1d404370f82e75c37ceced0661d16b154
|
data/README.md
CHANGED
@@ -1,25 +1,22 @@
|
|
1
1
|
# Hintme
|
2
|
-
|
2
|
+
The stupid, simple [Devhints.io](http://devhints.io/) CLI
|
3
3
|
|
4
4
|
## Installation
|
5
5
|
|
6
|
-
|
6
|
+
Ensure you've installed ruby (If you're using OS X/macOS you should be fine)
|
7
7
|
|
8
|
-
|
9
|
-
gem 'hintme'
|
10
|
-
```
|
8
|
+
install hintme onto your system
|
11
9
|
|
12
|
-
|
10
|
+
$ gem install hintme
|
13
11
|
|
14
|
-
$ bundle
|
15
12
|
|
16
|
-
|
13
|
+
Ask for hints:
|
17
14
|
|
18
|
-
$
|
15
|
+
$ hintme rails
|
19
16
|
|
20
17
|
## Contributing
|
21
18
|
|
22
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
19
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/jcambass/hintme
|
23
20
|
|
24
21
|
## License
|
25
22
|
|
data/lib/hintme.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'hintme/version'
|
2
|
-
require 'hintme/
|
3
|
-
require 'hintme/markdown_printer'
|
4
|
+
require 'hintme/hinter'
|
4
5
|
|
6
|
+
# HintMe Gem toplevel module
|
5
7
|
module HintMe
|
8
|
+
# searches an prints a cheatsheet for a given
|
9
|
+
# topic to the console
|
10
|
+
#
|
11
|
+
# @param topic [String]
|
12
|
+
#
|
6
13
|
def self.hint(topic)
|
7
|
-
|
8
|
-
if markdown
|
9
|
-
MarkdownPrinter.new.print(markdown)
|
10
|
-
else
|
11
|
-
puts ":( There isn't a cheatsheet for #{topic}. Maybe you should request one at devhints.io"
|
12
|
-
end
|
14
|
+
Hinter.new.hint(topic)
|
13
15
|
end
|
14
16
|
end
|
data/lib/hintme/api/client.rb
CHANGED
@@ -1,28 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'uri'
|
2
4
|
require 'net/http'
|
3
5
|
require 'net/https'
|
4
6
|
|
5
7
|
module HintMe
|
6
8
|
module API
|
9
|
+
# Client for the DevHints API
|
7
10
|
class Client
|
11
|
+
# Base URL for the DevHints cheatsheets github repository
|
8
12
|
RAW_REPO_URL = 'https://raw.githubusercontent.com/rstacruz/cheatsheets/master/'
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
# searches and downloads the raw markdown representation of cheatsheet
|
15
|
+
#
|
16
|
+
# @param topic [String] topic to fetch cheatsheet for
|
17
|
+
#
|
18
|
+
def search_cheatsheet_for_topic(topic)
|
19
|
+
download_cheatsheet(topic) if cheatsheet_exists?(topic)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# checks if a cheatsheet for a certain topic exists
|
25
|
+
#
|
26
|
+
# @param topic [String]
|
27
|
+
# @return [true, false]
|
28
|
+
#
|
29
|
+
def cheatsheet_exists?(topic)
|
30
|
+
url = build_topic_url(topic)
|
31
|
+
response = Net::HTTP.get_response(url)
|
12
32
|
|
13
|
-
case
|
14
|
-
when Net::HTTPSuccess then
|
15
|
-
when Net::HTTPNotFound then
|
33
|
+
case response
|
34
|
+
when Net::HTTPSuccess then true
|
35
|
+
when Net::HTTPNotFound then false
|
16
36
|
else
|
17
|
-
response
|
37
|
+
handle_invalid_response(response)
|
18
38
|
end
|
19
39
|
end
|
20
40
|
|
21
|
-
|
41
|
+
# downloads a cheatsheet for a given topic
|
42
|
+
#
|
43
|
+
# @param topic [String]
|
44
|
+
# @return [String, nil] downloaded cheatsheet
|
45
|
+
#
|
46
|
+
def download_cheatsheet(topic)
|
47
|
+
url = build_topic_url(topic)
|
48
|
+
Net::HTTP.get(url)
|
49
|
+
.force_encoding('utf-8')
|
50
|
+
end
|
22
51
|
|
23
|
-
|
52
|
+
# builds the full repository url for a specific cheatsheet
|
53
|
+
#
|
54
|
+
# @param topic [String] topic for which the full cheatsheet url
|
55
|
+
# should be build
|
56
|
+
#
|
57
|
+
def build_topic_url(topic)
|
24
58
|
URI("#{RAW_REPO_URL}#{topic}.md")
|
25
59
|
end
|
60
|
+
|
61
|
+
def handle_invalid_response(response)
|
62
|
+
raise StandartError, 'An network error occured.' \
|
63
|
+
"Error response: #{response.value}"
|
64
|
+
end
|
26
65
|
end
|
27
66
|
end
|
28
67
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'tty/markdown'
|
4
|
+
|
5
|
+
module HintMe
|
6
|
+
module Cheatsheet
|
7
|
+
# prints a cheatsheet to the console
|
8
|
+
class Printer
|
9
|
+
# prints the content of a cheatsheet on the console
|
10
|
+
#
|
11
|
+
# @param cheatsheet [String]
|
12
|
+
#
|
13
|
+
def print(cheatsheet)
|
14
|
+
puts ::TTY::Markdown.parse(cheatsheet)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'api/client'
|
4
|
+
require_relative 'cheatsheet/printer'
|
5
|
+
|
6
|
+
module HintMe
|
7
|
+
# entry point for all HintMe functionality
|
8
|
+
class Hinter
|
9
|
+
# creates a new {Hinter} instance
|
10
|
+
#
|
11
|
+
def initialize
|
12
|
+
@api_client = API::Client.new
|
13
|
+
@cheatsheet_printer = Cheatsheet::Printer.new
|
14
|
+
end
|
15
|
+
|
16
|
+
# searches and prints a cheatsheet for a given topic
|
17
|
+
# to the console
|
18
|
+
#
|
19
|
+
# if no cheatsheet is found for the given topic
|
20
|
+
# a error message will be printed to the console
|
21
|
+
#
|
22
|
+
# @param topic [String]
|
23
|
+
#
|
24
|
+
def hint(topic)
|
25
|
+
cheatsheet = cheatsheet_for_topic(topic)
|
26
|
+
|
27
|
+
if cheatsheet
|
28
|
+
print_cheatsheet(cheatsheet)
|
29
|
+
else
|
30
|
+
display_missing_cheatsheet_error(topic)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# fetches the cheatsheet for a topic
|
37
|
+
#
|
38
|
+
# @param topic [String]
|
39
|
+
# @return [String]
|
40
|
+
#
|
41
|
+
def cheatsheet_for_topic(topic)
|
42
|
+
@api_client.search_cheatsheet_for_topic(topic)
|
43
|
+
end
|
44
|
+
|
45
|
+
# prints a cheatsheet to the console
|
46
|
+
#
|
47
|
+
# @param cheatsheet [String]
|
48
|
+
#
|
49
|
+
def print_cheatsheet(cheatsheet)
|
50
|
+
@cheatsheet_printer.print(cheatsheet)
|
51
|
+
end
|
52
|
+
|
53
|
+
# displays a error message informing the user about
|
54
|
+
# the missing cheatsheet to the console
|
55
|
+
#
|
56
|
+
def display_missing_cheatsheet_error(topic)
|
57
|
+
topic ||= 'escaping the void of notopic-island'
|
58
|
+
|
59
|
+
puts ":( There isn't a cheatsheet for #{topic}." \
|
60
|
+
' Maybe you should request one at devhints.io'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/hintme/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hintme
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Ambass
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -88,7 +88,8 @@ files:
|
|
88
88
|
- hintme.gemspec
|
89
89
|
- lib/hintme.rb
|
90
90
|
- lib/hintme/api/client.rb
|
91
|
-
- lib/hintme/
|
91
|
+
- lib/hintme/cheatsheet/printer.rb
|
92
|
+
- lib/hintme/hinter.rb
|
92
93
|
- lib/hintme/version.rb
|
93
94
|
homepage: https://github.com/jcambass/hintme
|
94
95
|
licenses:
|