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 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
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'spec_ref_lib'
5
+
6
+ SpecRefLib::Start.new
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
@@ -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
@@ -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: []