search_ui 0.0.5 → 0.0.6
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 +4 -4
- data/VERSION +1 -1
- data/lib/search_ui/search.rb +44 -2
- data/lib/search_ui/version.rb +1 -1
- data/lib/search_ui.rb +11 -0
- data/search_ui.gemspec +5 -5
- metadata +5 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bd55ce81380bd3c0eb0d1567dc0b6e5954ca128d8256e77b093d4dca158bf74
|
4
|
+
data.tar.gz: 49975f652e6579eb3a51bb8f11cb1c2ab66cbcb8cc05dc0f6ae7f657cb085f79
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d88362379d5e903b82d267dd1db8f8062f2f3b675423af826e21945ad935a3e4246c4c1639dfa205f97ea02c7dbab02618e02930af777547014038a221e919df
|
7
|
+
data.tar.gz: c347e48ea327460c68a57092fef8910a91fb1fbaf69a2289e328d1e9d81e7d0791f71efee0a59d82db037bb74952c71acf2c1e2abe63b71f5cf5420029f5a9e5
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
data/lib/search_ui/search.rb
CHANGED
@@ -1,9 +1,35 @@
|
|
1
1
|
require 'term/ansicolor'
|
2
2
|
|
3
|
+
# SearchUI::Search manages interactive console-based searching through an array
|
4
|
+
# of objects
|
5
|
+
#
|
6
|
+
# This class provides an interactive search interface that allows users to
|
7
|
+
# filter and select objects from a collection based on text input patterns.
|
8
|
+
# It handles terminal input processing, display updates, and user navigation
|
9
|
+
# through the search results.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# SearchUI::Search.new(
|
13
|
+
# match: -> pattern { items.select { |item| item.name.include?(pattern) } },
|
14
|
+
# query: -> answer, matches, selector { matches[selector]&.name || 'No matches' },
|
15
|
+
# found: -> answer, matches, selector { matches[selector] }
|
16
|
+
# ).start
|
3
17
|
class SearchUI::Search
|
4
18
|
include Term::ANSIColor
|
5
19
|
extend Term::ANSIColor
|
6
20
|
|
21
|
+
# Initializes a new SearchUI::Search instance with the specified parameters.
|
22
|
+
#
|
23
|
+
# @param match [ Proc ] a procedure that takes a string and returns an array
|
24
|
+
# of matching objects
|
25
|
+
# @param query [ Proc ] a procedure that takes the current answer, matches,
|
26
|
+
# and selector index to generate a query result
|
27
|
+
# @param found [ Proc ] a procedure that takes the current answer, matches,
|
28
|
+
# jand selector index to determine if a selection has been made
|
29
|
+
# @param output [ IO ] the output stream to display the search interface
|
30
|
+
# (defaults to STDOUT)
|
31
|
+
# @param prompt [ String ] the prompt template to display during searching
|
32
|
+
# (defaults to 'Search? %s')
|
7
33
|
def initialize(
|
8
34
|
match:,
|
9
35
|
query:,
|
@@ -21,6 +47,11 @@ class SearchUI::Search
|
|
21
47
|
@answer = ''
|
22
48
|
end
|
23
49
|
|
50
|
+
# Starts the interactive search interface and handles user input until a
|
51
|
+
# selection is made or the process is cancelled.
|
52
|
+
#
|
53
|
+
# @return [ Object, nil ] returns the selected result object when a selection
|
54
|
+
# is made, or nil if the process is cancelled
|
24
55
|
def start
|
25
56
|
@output.print reset
|
26
57
|
@matches = @match.(@answer)
|
@@ -41,13 +72,25 @@ class SearchUI::Search
|
|
41
72
|
return nil
|
42
73
|
end
|
43
74
|
@matches = @match.(@answer)
|
44
|
-
@selector =
|
75
|
+
@selector = @selector.clamp(0, @matches.size - 1)
|
45
76
|
result = @query.(@answer, @matches, @selector)
|
46
77
|
end
|
47
78
|
end
|
48
79
|
|
49
80
|
private
|
50
81
|
|
82
|
+
# Reads and processes a single character input from stdin, handling special
|
83
|
+
# key sequences and updating the search state accordingly.
|
84
|
+
#
|
85
|
+
# This method manages raw terminal input to capture user keystrokes,
|
86
|
+
# interpreting control characters and escape sequences for navigation,
|
87
|
+
# selection, and editing operations. It temporarily disables terminal echo
|
88
|
+
# and sets raw mode to ensure proper input handling.
|
89
|
+
#
|
90
|
+
# @return [ Boolean, nil ] returns true when the Enter key is pressed to
|
91
|
+
# confirm selection, false when Ctrl+C is pressed to cancel the operation, or
|
92
|
+
# nil for all other inputs
|
93
|
+
# which update the search state and require further processing
|
51
94
|
def getc
|
52
95
|
print hide_cursor
|
53
96
|
system 'stty raw -echo'
|
@@ -87,4 +130,3 @@ class SearchUI::Search
|
|
87
130
|
print show_cursor
|
88
131
|
end
|
89
132
|
end
|
90
|
-
|
data/lib/search_ui/version.rb
CHANGED
data/lib/search_ui.rb
CHANGED
@@ -1,4 +1,15 @@
|
|
1
1
|
|
2
|
+
# SearchUI is a library that provides interactive console-based searching
|
3
|
+
# capabilities
|
4
|
+
#
|
5
|
+
# This module serves as the root namespace for the SearchUI library, which
|
6
|
+
# enables users to perform text-based searches through collections of objects
|
7
|
+
# directly in the terminal. It offers an intuitive interface for filtering
|
8
|
+
# results and selecting items based on user input patterns.
|
9
|
+
#
|
10
|
+
# The main functionality is provided by the SearchUI::Search class, which
|
11
|
+
# handles the interactive search experience including input processing, display
|
12
|
+
# management, and result selection.
|
2
13
|
module SearchUI
|
3
14
|
end
|
4
15
|
|
data/search_ui.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: search_ui 0.0.
|
2
|
+
# stub: search_ui 0.0.6 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "search_ui".freeze
|
6
|
-
s.version = "0.0.
|
6
|
+
s.version = "0.0.6".freeze
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "1980-01-02"
|
12
12
|
s.description = "This library allows a user to search an array of objects\n interactively in the console by matching the pattern a user inputs to an\n array of objects and pick one of the remaining objects.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.executables = ["search_it".freeze]
|
@@ -18,12 +18,12 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.licenses = ["MIT".freeze]
|
19
19
|
s.rdoc_options = ["--title".freeze, "SearchUi -- Search User Interface".freeze, "--main".freeze, "README.md".freeze]
|
20
20
|
s.required_ruby_version = Gem::Requirement.new(">= 2.0".freeze)
|
21
|
-
s.rubygems_version = "3.
|
21
|
+
s.rubygems_version = "3.6.9".freeze
|
22
22
|
s.summary = "Library to provide a user interface for searching in a console".freeze
|
23
23
|
|
24
24
|
s.specification_version = 4
|
25
25
|
|
26
|
-
s.add_development_dependency(%q<gem_hadar>.freeze, ["~>
|
26
|
+
s.add_development_dependency(%q<gem_hadar>.freeze, ["~> 2.6".freeze])
|
27
27
|
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.0".freeze])
|
28
28
|
s.add_development_dependency(%q<debug>.freeze, [">= 0".freeze])
|
29
29
|
s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.0".freeze])
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: search_ui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: gem_hadar
|
@@ -16,14 +15,14 @@ dependencies:
|
|
16
15
|
requirements:
|
17
16
|
- - "~>"
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: '2.6'
|
20
19
|
type: :development
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
23
|
- - "~>"
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
25
|
+
version: '2.6'
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: simplecov
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -123,7 +122,6 @@ homepage: https://github.com/flori/search_ui
|
|
123
122
|
licenses:
|
124
123
|
- MIT
|
125
124
|
metadata: {}
|
126
|
-
post_install_message:
|
127
125
|
rdoc_options:
|
128
126
|
- "--title"
|
129
127
|
- SearchUi -- Search User Interface
|
@@ -142,8 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
140
|
- !ruby/object:Gem::Version
|
143
141
|
version: '0'
|
144
142
|
requirements: []
|
145
|
-
rubygems_version: 3.
|
146
|
-
signing_key:
|
143
|
+
rubygems_version: 3.6.9
|
147
144
|
specification_version: 4
|
148
145
|
summary: Library to provide a user interface for searching in a console
|
149
146
|
test_files: []
|