spec_ref_lib 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/spec-ref-lib +6 -0
- data/lib/config.rb +18 -0
- data/lib/handle_file.rb +33 -0
- data/lib/helpers.rb +22 -0
- data/lib/menu.rb +91 -0
- data/lib/method.rb +42 -0
- data/lib/spec_ref_lib.rb +44 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2f418cdf81a97989c727ee583dcd52140db5c6e59385815816ed8ca4d4bb4660
|
4
|
+
data.tar.gz: 3dfff828d545d99a51abb1c03bb9998fcfd83472227a1a7dcf58e46b12c22540
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5afdafeb988cff721101bbedb4194f10fa4e27cc64e7a0b5f406bf5a573887773614a0c758fe6353636af4499200fa4bbb8bb74a794af4f2c19548e9641b0c5d
|
7
|
+
data.tar.gz: 51b91f92681baab7c5128aeb4432cbe35a4aaf47a9e1d4afd7d74076bab2b04edd94a7a1426b1e10eff831c286587dafa6e54b609b096a606cd801752122f609
|
data/bin/spec-ref-lib
ADDED
data/lib/config.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SpecRefLib
|
4
|
+
# Specr version number
|
5
|
+
class Config
|
6
|
+
def self.version
|
7
|
+
'1.0.0'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.default_url
|
11
|
+
'https://raw.githubusercontent.com/swaff-y/spec-ref-lib/main/lib/specr.json'
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.env
|
15
|
+
'SPEC_REF_LIB'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/handle_file.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helpers'
|
4
|
+
require_relative 'config'
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
module SpecRefLib
|
8
|
+
# Displays the keyword/method provided
|
9
|
+
class HandleFile
|
10
|
+
def initialize
|
11
|
+
@default_file = nil
|
12
|
+
fetch_default_file
|
13
|
+
end
|
14
|
+
|
15
|
+
def fetch_default_file
|
16
|
+
uri = URI.parse(SpecRefLib::Config.default_url)
|
17
|
+
@default_file = Net::HTTP.get_response(uri)
|
18
|
+
rescue StandardError
|
19
|
+
@default_file = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
def fetch_json
|
23
|
+
JSON.parse(File.read(ENV.fetch(SpecRefLib::Config.env)))
|
24
|
+
rescue StandardError
|
25
|
+
if @default_file.nil?
|
26
|
+
SpecRefLib::Helpers.log 'Invalid file'
|
27
|
+
SpecRefLib::Helpers.leave
|
28
|
+
else
|
29
|
+
JSON.parse(@default_file.body)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/helpers.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SpecRefLib
|
4
|
+
# Class to build the selection menu
|
5
|
+
class Helpers
|
6
|
+
def self.clear
|
7
|
+
system 'clear'
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.log(str)
|
11
|
+
puts str
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.ret_value
|
15
|
+
$stdin.gets.chomp
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.leave
|
19
|
+
exit
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/menu.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require_relative 'config'
|
5
|
+
require_relative 'helpers'
|
6
|
+
require_relative 'handle_file'
|
7
|
+
|
8
|
+
module SpecRefLib
|
9
|
+
# Class to build the selection menu
|
10
|
+
class Menu
|
11
|
+
attr_reader :status
|
12
|
+
|
13
|
+
def initialize(filepath)
|
14
|
+
SpecRefLib::Helpers.clear
|
15
|
+
@json = filepath.fetch_json
|
16
|
+
show_menu
|
17
|
+
end
|
18
|
+
|
19
|
+
def show_menu
|
20
|
+
SpecRefLib::Helpers.log "Spec-ref-lib version #{SpecRefLib::Config.version}"
|
21
|
+
SpecRefLib::Helpers.log ''
|
22
|
+
|
23
|
+
@json['categories'].each_with_index do |category, index|
|
24
|
+
SpecRefLib::Helpers.log "\t#{index + 1}. #{category['name']}"
|
25
|
+
end
|
26
|
+
|
27
|
+
get_input('list_selector', @json)
|
28
|
+
end
|
29
|
+
|
30
|
+
def show_sub_menu(menu, name)
|
31
|
+
SpecRefLib::Helpers.log name
|
32
|
+
SpecRefLib::Helpers.log ''
|
33
|
+
|
34
|
+
menu.each_with_index do |category, index|
|
35
|
+
SpecRefLib::Helpers.log "\t#{index + 1}. #{category['name']}"
|
36
|
+
end
|
37
|
+
|
38
|
+
get_input('sub_list_selector', menu)
|
39
|
+
end
|
40
|
+
|
41
|
+
def show_example(example)
|
42
|
+
SpecRefLib::Helpers.log example
|
43
|
+
get_input('end_list_selector', nil)
|
44
|
+
end
|
45
|
+
|
46
|
+
# rubocop:disable Metrics/MethodLength
|
47
|
+
def get_input(type, category)
|
48
|
+
case type
|
49
|
+
when 'list_selector'
|
50
|
+
value = list_validator(SpecRefLib::Helpers.ret_value, category['categories'], type, category)
|
51
|
+
menu = category['categories'][value - 1]
|
52
|
+
sub_name = menu['name']
|
53
|
+
sub_menu = menu['categories']
|
54
|
+
SpecRefLib::Helpers.clear
|
55
|
+
show_sub_menu(sub_menu, sub_name)
|
56
|
+
when 'sub_list_selector'
|
57
|
+
value = list_validator(SpecRefLib::Helpers.ret_value, category, type, category)
|
58
|
+
menu = category[value - 1]
|
59
|
+
sub_example = menu['example']
|
60
|
+
SpecRefLib::Helpers.clear
|
61
|
+
show_example(sub_example)
|
62
|
+
when 'end_list_selector'
|
63
|
+
list_validator(SpecRefLib::Helpers.ret_value, nil, type, category)
|
64
|
+
SpecRefLib::Helpers.clear
|
65
|
+
show_menu
|
66
|
+
end
|
67
|
+
end
|
68
|
+
# rubocop:enable Metrics/MethodLength
|
69
|
+
|
70
|
+
# rubocop:disable Metrics/MethodLength
|
71
|
+
def list_validator(value, array, type, category)
|
72
|
+
if value == 'q'
|
73
|
+
SpecRefLib::Helpers.clear
|
74
|
+
SpecRefLib::Helpers.log 'Good Bye'
|
75
|
+
return SpecRefLib::Helpers.leave
|
76
|
+
end
|
77
|
+
|
78
|
+
# rubocop:disable Style/SoleNestedConditional
|
79
|
+
if array && value.to_i < array.length + 1
|
80
|
+
return value.to_i unless value.to_i.zero?
|
81
|
+
end
|
82
|
+
# rubocop:enable Style/SoleNestedConditional
|
83
|
+
|
84
|
+
return false unless array
|
85
|
+
|
86
|
+
SpecRefLib::Helpers.log 'Wrong value'
|
87
|
+
get_input(type, category)
|
88
|
+
end
|
89
|
+
# rubocop:enable Metrics/MethodLength
|
90
|
+
end
|
91
|
+
end
|
data/lib/method.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'helpers'
|
4
|
+
require_relative 'handle_file'
|
5
|
+
|
6
|
+
module SpecRefLib
|
7
|
+
# Displays the keyword/method provided
|
8
|
+
class Method
|
9
|
+
def initialize(filepath, method)
|
10
|
+
@found = false
|
11
|
+
SpecRefLib::Helpers.clear
|
12
|
+
@keyword_array = []
|
13
|
+
@json = filepath.fetch_json
|
14
|
+
show_method(method)
|
15
|
+
end
|
16
|
+
|
17
|
+
def show_method(method)
|
18
|
+
@json['categories'].each do |category|
|
19
|
+
category['categories'].each do |cat|
|
20
|
+
next unless cat['keywords'].include? method
|
21
|
+
|
22
|
+
SpecRefLib::Helpers.log cat['example']
|
23
|
+
SpecRefLib::Helpers.log ''
|
24
|
+
@found = true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
SpecRefLib::Helpers.log 'No keywords found' unless @found
|
28
|
+
handle_input(SpecRefLib::Helpers.ret_value)
|
29
|
+
end
|
30
|
+
|
31
|
+
def handle_input(value)
|
32
|
+
SpecRefLib::Helpers.clear
|
33
|
+
|
34
|
+
if value == 'q'
|
35
|
+
SpecRefLib::Helpers.log 'Good Bye'
|
36
|
+
return SpecRefLib::Helpers.leave
|
37
|
+
end
|
38
|
+
|
39
|
+
SpecRefLib::Start.new
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/spec_ref_lib.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'optimist'
|
4
|
+
require_relative 'menu'
|
5
|
+
require_relative 'method'
|
6
|
+
require_relative 'config'
|
7
|
+
require_relative 'handle_file'
|
8
|
+
|
9
|
+
module SpecRefLib
|
10
|
+
# The start method for spec-ref-lib
|
11
|
+
class Start
|
12
|
+
attr_reader :opts
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@opts = set_options
|
16
|
+
@filepath = SpecRefLib::HandleFile.new
|
17
|
+
handler
|
18
|
+
end
|
19
|
+
|
20
|
+
# rubocop: disable Layout/HeredocIndentation
|
21
|
+
# rubocop: disable Naming/HeredocDelimiterNaming
|
22
|
+
def set_options
|
23
|
+
Optimist.options do
|
24
|
+
version "spec-ref-lib #{SpecRefLib::Config.version} (c) 2022 Kyle Swaffield"
|
25
|
+
banner <<~EOS
|
26
|
+
Rspec library
|
27
|
+
|
28
|
+
Usage:
|
29
|
+
spec-ref-lib [options] <method name | file path>
|
30
|
+
where [options] are:
|
31
|
+
EOS
|
32
|
+
opt :method, 'rspec keyword or method name', :type => :string # flag --method, default false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
# rubocop: enable Layout/HeredocIndentation
|
36
|
+
# rubocop: enable Naming/HeredocDelimiterNaming
|
37
|
+
|
38
|
+
def handler
|
39
|
+
return SpecRefLib::Menu.new(@filepath) if @opts[:method].nil?
|
40
|
+
|
41
|
+
SpecRefLib::Method.new(@filepath, @opts[:method])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: spec_ref_lib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kyle Swaffield
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-11-16 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A rspec library
|
14
|
+
email: kyle@swaff.iu.au
|
15
|
+
executables:
|
16
|
+
- spec-ref-lib
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- bin/spec-ref-lib
|
21
|
+
- lib/config.rb
|
22
|
+
- lib/handle_file.rb
|
23
|
+
- lib/helpers.rb
|
24
|
+
- lib/menu.rb
|
25
|
+
- lib/method.rb
|
26
|
+
- lib/spec_ref_lib.rb
|
27
|
+
homepage: https://rubygems.org/gems/spec_ref_lib
|
28
|
+
licenses:
|
29
|
+
- MIT
|
30
|
+
metadata: {}
|
31
|
+
post_install_message:
|
32
|
+
rdoc_options: []
|
33
|
+
require_paths:
|
34
|
+
- lib
|
35
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2.6'
|
40
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '0'
|
45
|
+
requirements: []
|
46
|
+
rubygems_version: 3.2.17
|
47
|
+
signing_key:
|
48
|
+
specification_version: 4
|
49
|
+
summary: ''
|
50
|
+
test_files: []
|