ifilter 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +0 -5
- data/LICENSE.txt +17 -18
- data/README.md +21 -5
- data/bin/console +7 -0
- data/bin/setup +5 -0
- data/{bin → exe}/ifilter +0 -0
- data/ifilter.gemspec +9 -6
- data/lib/ifilter.rb +4 -3
- data/lib/ifilter/{interface.rb → client.rb} +21 -14
- data/lib/ifilter/input.rb +1 -1
- data/lib/ifilter/version.rb +1 -1
- data/lib/ifilter/window.rb +19 -0
- metadata +41 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3c3826565d691dd1f2125b61351f67e7328599d
|
4
|
+
data.tar.gz: f98fc31feb76580b6b696b7ccc76a6eee7902eb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 300473b6da810bc1c060924881e2ecc3bd3e49293eb51c35449aafc32e1e41fc397033f97bd5be826b75be72e3b3af2d8523448ab2922cf5c600e418d37d9cac
|
7
|
+
data.tar.gz: a9809b2d05043a1f6f0bf82b1233d3f091af9fb2f0d079cc64a84b8b22ac7192b531b748e681f4a051aa865bda180de99c39dadb2d553aa414993539a7ea87be
|
data/.gitignore
CHANGED
data/LICENSE.txt
CHANGED
@@ -1,22 +1,21 @@
|
|
1
|
-
|
1
|
+
The MIT License (MIT)
|
2
2
|
|
3
|
-
|
3
|
+
Copyright (c) 2015 kaihar4
|
4
4
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
the following conditions:
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
12
11
|
|
13
|
-
The above copyright notice and this permission notice shall be
|
14
|
-
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
15
14
|
|
16
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
OF
|
22
|
-
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
CHANGED
@@ -16,11 +16,13 @@ Add this line to your application's Gemfile:
|
|
16
16
|
gem 'ifilter'
|
17
17
|
```
|
18
18
|
|
19
|
+
And then execute:
|
20
|
+
|
21
|
+
$ bundle
|
22
|
+
|
19
23
|
Or install it yourself as:
|
20
24
|
|
21
|
-
|
22
|
-
$ gem install ifilter
|
23
|
-
```
|
25
|
+
$ gem install ifilter
|
24
26
|
|
25
27
|
## Usage
|
26
28
|
|
@@ -30,7 +32,7 @@ $ gem install ifilter
|
|
30
32
|
$ ps aux | ifilter
|
31
33
|
```
|
32
34
|
|
33
|
-
![execute](
|
35
|
+
![execute](http://kaihar4.com/images/github.com/kaihar4/ifilter/execute.gif)
|
34
36
|
|
35
37
|
### Module Style
|
36
38
|
|
@@ -42,4 +44,18 @@ array = ['foo', 'bar', 'hoge', 'fuga']
|
|
42
44
|
puts Ifilter.filtering(array)
|
43
45
|
```
|
44
46
|
|
45
|
-
![module](
|
47
|
+
![module](http://kaihar4.com/images/github.com/kaihar4/ifilter/module.gif)
|
48
|
+
|
49
|
+
## Development
|
50
|
+
|
51
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
|
52
|
+
|
53
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
54
|
+
|
55
|
+
## Contributing
|
56
|
+
|
57
|
+
1. Fork it ( https://github.com/kaihar4/ifilter/fork )
|
58
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
59
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
60
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
61
|
+
5. Create a new Pull Request
|
data/bin/console
ADDED
data/bin/setup
ADDED
data/{bin → exe}/ifilter
RENAMED
File without changes
|
data/ifilter.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
2
3
|
require 'ifilter/version'
|
3
4
|
|
4
5
|
Gem::Specification.new do |spec|
|
@@ -6,19 +7,21 @@ Gem::Specification.new do |spec|
|
|
6
7
|
spec.version = Ifilter::VERSION
|
7
8
|
spec.authors = ['kaihar4']
|
8
9
|
spec.email = ['kaihar4@gmail.com']
|
9
|
-
spec.summary = 'Interactive Filter
|
10
|
+
spec.summary = 'Interactive Filter'
|
10
11
|
spec.description = spec.summary
|
11
12
|
spec.homepage = 'https://github.com/kaihar4/ifilter'
|
12
13
|
spec.license = 'MIT'
|
13
14
|
|
14
|
-
spec.files = `git ls-files -z`.split("\x0")
|
15
|
-
spec.
|
16
|
-
spec.
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = 'exe'
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
|
17
18
|
spec.require_paths = ['lib']
|
18
19
|
|
19
20
|
spec.add_runtime_dependency 'curses'
|
20
21
|
spec.add_runtime_dependency 'safe_colorize'
|
21
22
|
|
22
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
23
|
+
spec.add_development_dependency 'bundler', '~> 1.9'
|
23
24
|
spec.add_development_dependency 'rake', '~> 10.0'
|
25
|
+
spec.add_development_dependency 'pry'
|
26
|
+
spec.add_development_dependency 'awesome_print'
|
24
27
|
end
|
data/lib/ifilter.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
require 'ifilter/
|
1
|
+
require 'ifilter/window'
|
2
|
+
require 'ifilter/client'
|
2
3
|
require 'ifilter/input'
|
3
4
|
|
4
5
|
module Ifilter
|
5
6
|
def self.filtering(array)
|
6
|
-
name = caller.last.match(/([^\/]+?)(\.|:)/)[
|
7
|
+
name = caller.last.match(/(?<name>[^\/]+?)(\.|:)/)[:name].capitalize
|
7
8
|
|
8
9
|
isatty = STDOUT.isatty
|
9
10
|
|
@@ -12,7 +13,7 @@ module Ifilter
|
|
12
13
|
STDOUT.reopen('/dev/tty')
|
13
14
|
end
|
14
15
|
|
15
|
-
ifilter =
|
16
|
+
ifilter = Client.new(name)
|
16
17
|
result = ifilter.grep(array)
|
17
18
|
|
18
19
|
unless isatty
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'curses'
|
2
2
|
|
3
3
|
module Ifilter
|
4
|
-
class
|
4
|
+
class Client
|
5
5
|
def initialize(name)
|
6
6
|
@prompt = "#{name}> "
|
7
7
|
@target = []
|
@@ -11,11 +11,7 @@ module Ifilter
|
|
11
11
|
@cursor_position = 1
|
12
12
|
@page_number = 1
|
13
13
|
|
14
|
-
Curses.
|
15
|
-
Curses.crmode
|
16
|
-
Curses.noecho
|
17
|
-
@window = Curses::Window.new(Curses.lines, Curses.cols, 0, 0)
|
18
|
-
@window.keypad(true)
|
14
|
+
@window = Window.new(Curses.lines, Curses.cols, 0, 0)
|
19
15
|
end
|
20
16
|
|
21
17
|
def grep(array)
|
@@ -36,11 +32,11 @@ module Ifilter
|
|
36
32
|
elsif keycode == :KEY_CTRL_J # <CR>
|
37
33
|
break if @outputs.size >= @cursor_position
|
38
34
|
|
39
|
-
elsif keycode == :KEY_DOWN
|
35
|
+
elsif keycode == :KEY_DOWN || keycode == :KEY_CTRL_N
|
40
36
|
down_cursor_position unless @outputs.empty?
|
41
37
|
next
|
42
38
|
|
43
|
-
elsif keycode == :KEY_UP
|
39
|
+
elsif keycode == :KEY_UP || keycode == :KEY_CTRL_P
|
44
40
|
up_cursor_position unless @outputs.empty?
|
45
41
|
next
|
46
42
|
|
@@ -52,10 +48,10 @@ module Ifilter
|
|
52
48
|
update_window
|
53
49
|
end
|
54
50
|
|
55
|
-
|
51
|
+
@window.close
|
56
52
|
@outputs[@cursor_position - 1]
|
57
53
|
rescue Interrupt # <C-c>
|
58
|
-
|
54
|
+
@window.close
|
59
55
|
end
|
60
56
|
|
61
57
|
private
|
@@ -81,7 +77,7 @@ module Ifilter
|
|
81
77
|
|
82
78
|
def get_keycode(key)
|
83
79
|
Curses.constants.select do |name|
|
84
|
-
/^KEY/
|
80
|
+
name =~ /^KEY/ && Curses.const_get(name) == key
|
85
81
|
end.first
|
86
82
|
end
|
87
83
|
|
@@ -89,7 +85,7 @@ module Ifilter
|
|
89
85
|
array.each_with_object([]).with_index do |(str, outputs), index|
|
90
86
|
next if index < start_index
|
91
87
|
|
92
|
-
regex = @input.
|
88
|
+
regex = @input.to_regexp
|
93
89
|
|
94
90
|
if !regex.nil? && regex =~ str
|
95
91
|
outputs << str
|
@@ -100,9 +96,20 @@ module Ifilter
|
|
100
96
|
def output_line(word)
|
101
97
|
unless @cursor_position - 1 > @window.maxy - 1
|
102
98
|
@window.setpos(@cursor_position - 1, 0)
|
103
|
-
@cursor_position += 1
|
104
99
|
|
105
|
-
@
|
100
|
+
if !@input.size.zero? && @cursor_position > 1 && match_pos = word =~ @input.to_regexp
|
101
|
+
@window << word[0, match_pos]
|
102
|
+
|
103
|
+
@window.standout
|
104
|
+
@window << word[match_pos, @input.size]
|
105
|
+
@window.standend
|
106
|
+
|
107
|
+
@window << word[match_pos + @input.size, word.size - match_pos + @input.size]
|
108
|
+
else
|
109
|
+
@window << word
|
110
|
+
end
|
111
|
+
|
112
|
+
@cursor_position += 1
|
106
113
|
end
|
107
114
|
end
|
108
115
|
|
data/lib/ifilter/input.rb
CHANGED
data/lib/ifilter/version.rb
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'curses'
|
2
|
+
|
3
|
+
module Ifilter
|
4
|
+
class Window < Curses::Window
|
5
|
+
def initialize(height, width, y, x)
|
6
|
+
Curses.init_screen
|
7
|
+
Curses.crmode
|
8
|
+
Curses.noecho
|
9
|
+
|
10
|
+
super
|
11
|
+
|
12
|
+
self.keypad(true)
|
13
|
+
end
|
14
|
+
|
15
|
+
def close
|
16
|
+
Curses.close_screen
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ifilter
|
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
|
- kaihar4
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.9'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.9'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,35 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '10.0'
|
69
|
-
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: awesome_print
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: Interactive Filter
|
70
98
|
email:
|
71
99
|
- kaihar4@gmail.com
|
72
100
|
executables:
|
@@ -79,12 +107,15 @@ files:
|
|
79
107
|
- LICENSE.txt
|
80
108
|
- README.md
|
81
109
|
- Rakefile
|
82
|
-
- bin/
|
110
|
+
- bin/console
|
111
|
+
- bin/setup
|
112
|
+
- exe/ifilter
|
83
113
|
- ifilter.gemspec
|
84
114
|
- lib/ifilter.rb
|
115
|
+
- lib/ifilter/client.rb
|
85
116
|
- lib/ifilter/input.rb
|
86
|
-
- lib/ifilter/interface.rb
|
87
117
|
- lib/ifilter/version.rb
|
118
|
+
- lib/ifilter/window.rb
|
88
119
|
homepage: https://github.com/kaihar4/ifilter
|
89
120
|
licenses:
|
90
121
|
- MIT
|
@@ -105,8 +136,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
136
|
version: '0'
|
106
137
|
requirements: []
|
107
138
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.4.5
|
109
140
|
signing_key:
|
110
141
|
specification_version: 4
|
111
|
-
summary: Interactive Filter
|
142
|
+
summary: Interactive Filter
|
112
143
|
test_files: []
|