show-job 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/show-job +145 -0
- metadata +44 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b1a24099b1c214d84633b59ddc83c1eaca9261f623f428342187a93a14d735ca
|
4
|
+
data.tar.gz: 7b9e493b5f8e572ad6b5cd9ae44428d722c90374165956827a4b42ed32421056
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 795a9a9fa2b6c9d0b131bc4aaa62f4a67c1d16d5a3d912f47b34ba6cbb7d2712df88a28b2ab1bda381ba33b20161f62d67558c93ffc22c44cbb81d3c53cbca11
|
7
|
+
data.tar.gz: 925177e4fd56f7577f966fc7ff2ca4253791b42ff5aadb7bb5278628f1965694f66d0a7dabac1b697cd3957efeee8c49209ce076ea831babcf46892ccfab8216
|
data/bin/show-job
ADDED
@@ -0,0 +1,145 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require 'tempfile'
|
4
|
+
require 'json'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'debug'
|
7
|
+
|
8
|
+
class String
|
9
|
+
def red
|
10
|
+
colorize(31)
|
11
|
+
end
|
12
|
+
|
13
|
+
def light_blue
|
14
|
+
colorize(36)
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def colorize(color_code)
|
20
|
+
"\e[#{color_code}m#{self}\e[0m"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
# A bug is that
|
26
|
+
# --ww + --senior should show results
|
27
|
+
# that are worldwide openings for seniors.
|
28
|
+
# Currently --ww + --senior will show
|
29
|
+
# [ww jobs] + [senior jobs].
|
30
|
+
# The regex should change.
|
31
|
+
# It should be looking for both (senior|world)
|
32
|
+
#
|
33
|
+
# This could not be a bug and
|
34
|
+
# I might just be thinking too much.
|
35
|
+
class ShowJob
|
36
|
+
attr_reader :jobs
|
37
|
+
|
38
|
+
def initialize
|
39
|
+
@parser = OptionParser.new
|
40
|
+
@jobs = []
|
41
|
+
@fetched_jobs = JSON.parse URI.open('http://www.rubyyeast.com/jobs.json').read
|
42
|
+
end
|
43
|
+
|
44
|
+
def show
|
45
|
+
add_ww_jobs
|
46
|
+
add_senior_jobs
|
47
|
+
add_us_only_jobs
|
48
|
+
add_no_us_jobs
|
49
|
+
if ARGV.empty?
|
50
|
+
puts @parser.help
|
51
|
+
exit
|
52
|
+
end
|
53
|
+
@parser.parse!
|
54
|
+
show_jobs
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
# Add support for non-senior jobs
|
60
|
+
# non senior jobs donot contain the word senior in there
|
61
|
+
def add_senior_jobs
|
62
|
+
@parser.on('--senior', 'Display only senior jobs') do |value|
|
63
|
+
@jobs = @jobs + search_for('senior')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# non ww jobs donot contain the word 'world'
|
68
|
+
# donot_search_for('world')
|
69
|
+
def add_ww_jobs
|
70
|
+
@parser.on('--ww', 'Display only worldwide jobs') do |value|
|
71
|
+
@jobs = @jobs + search_for('world')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def add_us_only_jobs
|
76
|
+
@parser.on('--us-only', 'Display jobs only for the United States') do |value|
|
77
|
+
@jobs = @jobs + us_search
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def add_no_us_jobs
|
82
|
+
@parser.on('--no-us', 'Display jobs for places other than United States') do |value|
|
83
|
+
@jobs = @jobs + non_us_search
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def search_for(str)
|
88
|
+
result = []
|
89
|
+
@fetched_jobs.each do |arr_of_hash|
|
90
|
+
result << arr_of_hash.select do |job|
|
91
|
+
job["title"].match?(/#{str}/i) || job["misc"].match?(/#{str}/i)
|
92
|
+
end
|
93
|
+
end
|
94
|
+
result.flatten
|
95
|
+
end
|
96
|
+
|
97
|
+
def us_search
|
98
|
+
result = []
|
99
|
+
str = 'US|United States'
|
100
|
+
@fetched_jobs.each do |arr_of_hash|
|
101
|
+
result << arr_of_hash.select do |job|
|
102
|
+
job["title"].match?(/#{str}/) || job["misc"].match?(/#{str}/)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
result.flatten
|
106
|
+
end
|
107
|
+
|
108
|
+
def non_us_search
|
109
|
+
result = []
|
110
|
+
str = 'US|United States'
|
111
|
+
@fetched_jobs.each do |arr_of_hash|
|
112
|
+
result << arr_of_hash.reject do |job|
|
113
|
+
job["title"].match?(/#{str}/) || job["misc"].match?(/#{str}/)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
result.flatten
|
117
|
+
end
|
118
|
+
|
119
|
+
def show_jobs
|
120
|
+
file = Tempfile.new
|
121
|
+
file.write prettify
|
122
|
+
file.close
|
123
|
+
system("less -R #{file.path}")
|
124
|
+
file.unlink
|
125
|
+
end
|
126
|
+
|
127
|
+
def prettify
|
128
|
+
result = "\n"
|
129
|
+
jobs.uniq.each do |job|
|
130
|
+
# remoteonruby job titles have a newline in them
|
131
|
+
# which causes the colors to break when displaying.
|
132
|
+
# This is why I am removing the newline here.
|
133
|
+
str = job['title'].gsub("\n", "").red + "\n" + remove_whitespace(job['misc'].light_blue) + "\n" + job['href'] + "\n"
|
134
|
+
result << str
|
135
|
+
result << "-------------------------\n\n"
|
136
|
+
end
|
137
|
+
result + "Created by avi (avii@hey.com)"
|
138
|
+
end
|
139
|
+
|
140
|
+
def remove_whitespace(str)
|
141
|
+
str.split(" ").join(' ')
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
ShowJob.new.show
|
metadata
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: show-job
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Avi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-08-28 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: Shows jobs fetched from different ruby job sites
|
14
|
+
email: avii@hey.com
|
15
|
+
executables:
|
16
|
+
- show-job
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- bin/show-job
|
21
|
+
homepage: https://rubygems.org/gems/show-job
|
22
|
+
licenses:
|
23
|
+
- MIT
|
24
|
+
metadata: {}
|
25
|
+
post_install_message:
|
26
|
+
rdoc_options: []
|
27
|
+
require_paths:
|
28
|
+
- lib
|
29
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
requirements: []
|
40
|
+
rubygems_version: 3.4.17
|
41
|
+
signing_key:
|
42
|
+
specification_version: 4
|
43
|
+
summary: Shows jobs fetched from different ruby job sites
|
44
|
+
test_files: []
|