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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a42c3eb7c9a29a591cde596b345e5480d25046d01c6f5698199b781d4ca34cf4
4
- data.tar.gz: a5533a9c066daae460700dccaec7c129185bee714a4d691703dab40a2b515745
3
+ metadata.gz: 4bd55ce81380bd3c0eb0d1567dc0b6e5954ca128d8256e77b093d4dca158bf74
4
+ data.tar.gz: 49975f652e6579eb3a51bb8f11cb1c2ab66cbcb8cc05dc0f6ae7f657cb085f79
5
5
  SHA512:
6
- metadata.gz: 9b70cd337aabb26826e8780740968c8282909b93952e6cc13bb37ea1c349224aae644ddd89399f5b81238ac52e468692a864ca3d8dc795c5560e102da01e3dbe
7
- data.tar.gz: d59cc6ed71ed3a444ceead9380a6355ee3a2171dbf60788152aa0edf5209eeeef6078efba5d9568583ed70733f549b298c41be7402aeec58926c9648f350396b
6
+ metadata.gz: d88362379d5e903b82d267dd1db8f8062f2f3b675423af826e21945ad935a3e4246c4c1639dfa205f97ea02c7dbab02618e02930af777547014038a221e919df
7
+ data.tar.gz: c347e48ea327460c68a57092fef8910a91fb1fbaf69a2289e328d1e9d81e7d0791f71efee0a59d82db037bb74952c71acf2c1e2abe63b71f5cf5420029f5a9e5
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
@@ -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 = [ 0, [ @selector, @matches.size - 1 ].min ].max
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
-
@@ -1,6 +1,6 @@
1
1
  module SearchUi
2
2
  # SearchUi version
3
- VERSION = '0.0.5'
3
+ VERSION = '0.0.6'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
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.5 ruby lib
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.5".freeze
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 = "2024-08-28"
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.5.16".freeze
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, ["~> 1.17.0".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.5
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: 2024-08-28 00:00:00.000000000 Z
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: 1.17.0
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: 1.17.0
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.5.16
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: []