search_ui 0.0.8 → 0.1.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 +4 -4
- data/.rspec +1 -0
- data/Rakefile +11 -6
- data/VERSION +1 -1
- data/lib/search_ui/version.rb +1 -1
- data/lib/search_ui/wrapper.rb +67 -0
- data/lib/search_ui.rb +1 -1
- data/search_ui.gemspec +9 -7
- data/spec/search_ui/wrapper_spec.rb +56 -0
- data/spec/spec_helper.rb +7 -0
- metadata +29 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc66d5f87d1370805a30dad557a8831bc5a6e92d58f7a66cfbd1d595894a8643
|
|
4
|
+
data.tar.gz: 49a905c0c598310528f07e4bf7edf5cee63da6f522329c6417ca3b5b19834d5c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 36333f847712de6afc618fd6f8671b8ad693c9d929056863a959920bbed0d23cc888d4043ddddfe122a6f284128bfee8983cf0a2d45bf13cdcf0ff80c15c795c
|
|
7
|
+
data.tar.gz: 39b38086ac623ab6b918e56a3828396439dd383dec601c71c99ecb6124f327f00a47ce0b045935ef7fab84c7d0f349ea111650c3cfd1b1f5f1bc1757b63913a5
|
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
-r spec_helper
|
data/Rakefile
CHANGED
|
@@ -9,9 +9,13 @@ GemHadar do
|
|
|
9
9
|
email 'flori@ping.de'
|
|
10
10
|
homepage "https://github.com/flori/#{name}"
|
|
11
11
|
summary 'Library to provide a user interface for searching in a console'
|
|
12
|
-
description
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
description <<~EOT
|
|
13
|
+
This library allows a user to search an array of objects
|
|
14
|
+
interactively in the console by matching the pattern a user inputs to an
|
|
15
|
+
array of objects and pick one of the remaining objects.
|
|
16
|
+
EOT
|
|
17
|
+
|
|
18
|
+
test_dir 'spec'
|
|
15
19
|
|
|
16
20
|
ignore '.*.sw[pon]', 'pkg', 'Gemfile.lock', 'coverage', '.AppleDouble',
|
|
17
21
|
'tags', '.DS_Store', '.yardoc', 'doc'
|
|
@@ -22,10 +26,11 @@ GemHadar do
|
|
|
22
26
|
executables << 'search_it'
|
|
23
27
|
|
|
24
28
|
required_ruby_version '>= 2.0'
|
|
25
|
-
dependency 'tins',
|
|
29
|
+
dependency 'tins', '~>1.0'
|
|
26
30
|
dependency 'term-ansicolor', '~>1.0'
|
|
27
|
-
dependency 'amatch',
|
|
28
|
-
development_dependency '
|
|
31
|
+
dependency 'amatch', '~>0.0'
|
|
32
|
+
development_dependency 'rspec', '~>3.0'
|
|
33
|
+
development_dependency 'simplecov', '~>0.0'
|
|
29
34
|
development_dependency 'debug'
|
|
30
35
|
licenses << 'MIT'
|
|
31
36
|
end
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0
|
|
1
|
+
0.1.0
|
data/lib/search_ui/version.rb
CHANGED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Wrapper around an arbitrary value that:
|
|
2
|
+
#
|
|
3
|
+
# * Exposes the wrapped object via `value`.
|
|
4
|
+
# * Allows you to supply a custom string representation (`display`).
|
|
5
|
+
# * Delegates all other method calls straight through to the wrapped value.
|
|
6
|
+
#
|
|
7
|
+
# This is handy when you want to keep your objects printable in a
|
|
8
|
+
# particular colour or format (e.g. with Term::ANSIColor) while still
|
|
9
|
+
# behaving like the original object for comparisons, length checks,
|
|
10
|
+
# etc.
|
|
11
|
+
#
|
|
12
|
+
# @example Basic usage
|
|
13
|
+
# wrapper = SearchUI::Wrapper.new('foo', display: '🟢 foo')
|
|
14
|
+
# puts wrapper # => "🟢 foo"
|
|
15
|
+
# wrapper.length # => 3 (delegated to the string)
|
|
16
|
+
class SearchUI::Wrapper < BasicObject
|
|
17
|
+
# Initializes a new wrapper.
|
|
18
|
+
#
|
|
19
|
+
# @param value [Object] The object you want to wrap.
|
|
20
|
+
# @option options [String, Proc] :display Custom display string or block that returns it.
|
|
21
|
+
# Defaults to `value.to_s`.
|
|
22
|
+
def initialize(value, display: value.to_s)
|
|
23
|
+
@value = value
|
|
24
|
+
@display = display
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Returns the wrapped object.
|
|
28
|
+
#
|
|
29
|
+
# @return [Object]
|
|
30
|
+
attr_reader :value
|
|
31
|
+
|
|
32
|
+
# Equality comparison.
|
|
33
|
+
#
|
|
34
|
+
# Two wrappers are equal if their underlying values compare equal to the other argument.
|
|
35
|
+
#
|
|
36
|
+
# @param other [Object] The value or another wrapper to compare against.
|
|
37
|
+
# @return [Boolean]
|
|
38
|
+
def ==(other)
|
|
39
|
+
@value == other
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
alias eql? ==
|
|
43
|
+
|
|
44
|
+
# String representation of the wrapped object.
|
|
45
|
+
#
|
|
46
|
+
# If a custom `display` was supplied, that string is returned; otherwise,
|
|
47
|
+
# it falls back to `value.to_s`.
|
|
48
|
+
#
|
|
49
|
+
# @return [String]
|
|
50
|
+
def to_s
|
|
51
|
+
@display.to_s
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
alias to_str to_s
|
|
55
|
+
|
|
56
|
+
# Delegates any unknown method call to the wrapped value.
|
|
57
|
+
#
|
|
58
|
+
# This makes the wrapper behave like a transparent proxy for most
|
|
59
|
+
# operations (e.g. `length`, `upcase`, etc.).
|
|
60
|
+
#
|
|
61
|
+
# @param a [Array] Method name and arguments.
|
|
62
|
+
# @param o [Hash] Keyword arguments.
|
|
63
|
+
# @yield b Optional block passed to the underlying method.
|
|
64
|
+
def method_missing(*a, **o, &b)
|
|
65
|
+
@value.__send__(*a, **o, &b)
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/search_ui.rb
CHANGED
data/search_ui.gemspec
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
# stub: search_ui 0.0
|
|
2
|
+
# stub: search_ui 0.1.0 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.1.0".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
11
|
s.date = "1980-01-02"
|
|
12
|
-
s.description = "This library allows a user to search an array of objects\
|
|
12
|
+
s.description = "This library allows a user to search an array of objects\ninteractively in the console by matching the pattern a user inputs to an\narray of objects and pick one of the remaining objects.\n".freeze
|
|
13
13
|
s.email = "flori@ping.de".freeze
|
|
14
14
|
s.executables = ["search_it".freeze]
|
|
15
|
-
s.extra_rdoc_files = ["README.md".freeze, "lib/search_ui.rb".freeze, "lib/search_ui/search.rb".freeze, "lib/search_ui/version.rb".freeze]
|
|
16
|
-
s.files = ["Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/search_it".freeze, "lib/search_ui.rb".freeze, "lib/search_ui/search.rb".freeze, "lib/search_ui/version.rb".freeze, "search_ui.gemspec".freeze]
|
|
15
|
+
s.extra_rdoc_files = ["README.md".freeze, "lib/search_ui.rb".freeze, "lib/search_ui/search.rb".freeze, "lib/search_ui/version.rb".freeze, "lib/search_ui/wrapper.rb".freeze]
|
|
16
|
+
s.files = [".rspec".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "bin/search_it".freeze, "lib/search_ui.rb".freeze, "lib/search_ui/search.rb".freeze, "lib/search_ui/version.rb".freeze, "lib/search_ui/wrapper.rb".freeze, "search_ui.gemspec".freeze, "spec/search_ui/wrapper_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
|
17
17
|
s.homepage = "https://github.com/flori/search_ui".freeze
|
|
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 = "
|
|
21
|
+
s.rubygems_version = "4.0.3".freeze
|
|
22
22
|
s.summary = "Library to provide a user interface for searching in a console".freeze
|
|
23
|
+
s.test_files = ["spec/search_ui/wrapper_spec.rb".freeze, "spec/spec_helper.rb".freeze]
|
|
23
24
|
|
|
24
25
|
s.specification_version = 4
|
|
25
26
|
|
|
26
|
-
s.add_development_dependency(%q<gem_hadar>.freeze, ["
|
|
27
|
+
s.add_development_dependency(%q<gem_hadar>.freeze, [">= 2.17.0".freeze])
|
|
28
|
+
s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0".freeze])
|
|
27
29
|
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.0".freeze])
|
|
28
30
|
s.add_development_dependency(%q<debug>.freeze, [">= 0".freeze])
|
|
29
31
|
s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.0".freeze])
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
describe SearchUI::Wrapper do
|
|
2
|
+
let(:value) { 'foo' }
|
|
3
|
+
|
|
4
|
+
c = Term::ANSIColor
|
|
5
|
+
|
|
6
|
+
let(:sw1) { described_class.new(value, display: c.red { value }) }
|
|
7
|
+
|
|
8
|
+
let(:sw2) { described_class.new(value, display: c.blue { value }) }
|
|
9
|
+
|
|
10
|
+
it 'stores the wrapped value' do
|
|
11
|
+
expect(sw1.value).to eq value
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
it 'returns the custom string when to_s is called' do
|
|
15
|
+
expect(sw1.to_s).to eq c.red { 'foo' }
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'falls back to the wrapped object’s to_s if no display given' do
|
|
19
|
+
wrapper = described_class.new(value)
|
|
20
|
+
expect(wrapper.to_s).to eq 'foo'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it 'delegates methods to the wrapped value (e.g., length)' do
|
|
24
|
+
expect(sw1.length).to eq 3
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'compares equal when underlying values are equal' do
|
|
28
|
+
expect(sw1 == sw2).to be true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'is not equal to a different wrapped value' do
|
|
32
|
+
diff_obj = "bar"
|
|
33
|
+
expect(sw1 == described_class.new(diff_obj)).to be false
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
context 'equality with other wrappers' do
|
|
37
|
+
it 'is eq' do
|
|
38
|
+
expect(sw1).to eq sw2
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'is ==' do
|
|
42
|
+
expect(sw1 == sw2).to eq true
|
|
43
|
+
expect(sw2 == sw1).to eq true
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it 'is eql' do
|
|
47
|
+
expect(sw1).to be_eql sw2
|
|
48
|
+
expect(sw2).to be_eql sw1
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it 'is equal to its original value' do
|
|
53
|
+
expect(sw1).to eq value
|
|
54
|
+
expect(value).to eq sw1
|
|
55
|
+
end
|
|
56
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Florian Frank
|
|
@@ -11,18 +11,32 @@ date: 1980-01-02 00:00:00.000000000 Z
|
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: gem_hadar
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 2.17.0
|
|
19
|
+
type: :development
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 2.17.0
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rspec
|
|
14
28
|
requirement: !ruby/object:Gem::Requirement
|
|
15
29
|
requirements:
|
|
16
30
|
- - "~>"
|
|
17
31
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: '
|
|
32
|
+
version: '3.0'
|
|
19
33
|
type: :development
|
|
20
34
|
prerelease: false
|
|
21
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
36
|
requirements:
|
|
23
37
|
- - "~>"
|
|
24
38
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: '
|
|
39
|
+
version: '3.0'
|
|
26
40
|
- !ruby/object:Gem::Dependency
|
|
27
41
|
name: simplecov
|
|
28
42
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -93,10 +107,10 @@ dependencies:
|
|
|
93
107
|
- - "~>"
|
|
94
108
|
- !ruby/object:Gem::Version
|
|
95
109
|
version: '0.0'
|
|
96
|
-
description:
|
|
110
|
+
description: |
|
|
97
111
|
This library allows a user to search an array of objects
|
|
98
|
-
|
|
99
|
-
|
|
112
|
+
interactively in the console by matching the pattern a user inputs to an
|
|
113
|
+
array of objects and pick one of the remaining objects.
|
|
100
114
|
email: flori@ping.de
|
|
101
115
|
executables:
|
|
102
116
|
- search_it
|
|
@@ -106,7 +120,9 @@ extra_rdoc_files:
|
|
|
106
120
|
- lib/search_ui.rb
|
|
107
121
|
- lib/search_ui/search.rb
|
|
108
122
|
- lib/search_ui/version.rb
|
|
123
|
+
- lib/search_ui/wrapper.rb
|
|
109
124
|
files:
|
|
125
|
+
- ".rspec"
|
|
110
126
|
- Gemfile
|
|
111
127
|
- LICENSE
|
|
112
128
|
- README.md
|
|
@@ -116,7 +132,10 @@ files:
|
|
|
116
132
|
- lib/search_ui.rb
|
|
117
133
|
- lib/search_ui/search.rb
|
|
118
134
|
- lib/search_ui/version.rb
|
|
135
|
+
- lib/search_ui/wrapper.rb
|
|
119
136
|
- search_ui.gemspec
|
|
137
|
+
- spec/search_ui/wrapper_spec.rb
|
|
138
|
+
- spec/spec_helper.rb
|
|
120
139
|
homepage: https://github.com/flori/search_ui
|
|
121
140
|
licenses:
|
|
122
141
|
- MIT
|
|
@@ -139,7 +158,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
139
158
|
- !ruby/object:Gem::Version
|
|
140
159
|
version: '0'
|
|
141
160
|
requirements: []
|
|
142
|
-
rubygems_version:
|
|
161
|
+
rubygems_version: 4.0.3
|
|
143
162
|
specification_version: 4
|
|
144
163
|
summary: Library to provide a user interface for searching in a console
|
|
145
|
-
test_files:
|
|
164
|
+
test_files:
|
|
165
|
+
- spec/search_ui/wrapper_spec.rb
|
|
166
|
+
- spec/spec_helper.rb
|