gum 0.2.0 → 0.3.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 +5 -5
- data/LICENSE.txt +1 -1
- data/README.md +435 -16
- data/exe/gum +11 -0
- data/gum.gemspec +28 -32
- data/lib/gum/command.rb +159 -0
- data/lib/gum/commands/choose.rb +95 -0
- data/lib/gum/commands/confirm.rb +57 -0
- data/lib/gum/commands/file.rb +84 -0
- data/lib/gum/commands/filter.rb +119 -0
- data/lib/gum/commands/format.rb +74 -0
- data/lib/gum/commands/input.rb +68 -0
- data/lib/gum/commands/join.rb +41 -0
- data/lib/gum/commands/log.rb +98 -0
- data/lib/gum/commands/pager.rb +55 -0
- data/lib/gum/commands/spin.rb +167 -0
- data/lib/gum/commands/style.rb +93 -0
- data/lib/gum/commands/table.rb +93 -0
- data/lib/gum/commands/write.rb +84 -0
- data/lib/gum/upstream.rb +17 -0
- data/lib/gum/version.rb +5 -1
- data/lib/gum.rb +170 -10
- data/sig/gum/command.rbs +23 -0
- data/sig/gum/commands/choose.rbs +42 -0
- data/sig/gum/commands/confirm.rbs +30 -0
- data/sig/gum/commands/file.rbs +38 -0
- data/sig/gum/commands/filter.rbs +48 -0
- data/sig/gum/commands/format.rbs +47 -0
- data/sig/gum/commands/input.rbs +32 -0
- data/sig/gum/commands/join.rbs +24 -0
- data/sig/gum/commands/log.rbs +56 -0
- data/sig/gum/commands/pager.rbs +28 -0
- data/sig/gum/commands/spin.rbs +55 -0
- data/sig/gum/commands/style.rbs +44 -0
- data/sig/gum/commands/table.rbs +35 -0
- data/sig/gum/commands/write.rbs +35 -0
- data/sig/gum/upstream.rbs +9 -0
- data/sig/gum/version.rbs +5 -0
- data/sig/gum.rbs +79 -0
- metadata +49 -144
- data/.gitignore +0 -9
- data/.rspec +0 -2
- data/.travis.yml +0 -5
- data/Gemfile +0 -4
- data/Rakefile +0 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/gum/factory.rb +0 -33
- data/lib/gum/filter.rb +0 -28
- data/lib/gum/filters/exists.rb +0 -25
- data/lib/gum/filters/fuzzy.rb +0 -11
- data/lib/gum/filters/geo/bbox.rb +0 -70
- data/lib/gum/filters/geo/distance.rb +0 -26
- data/lib/gum/filters/geo/range.rb +0 -33
- data/lib/gum/filters/geo.rb +0 -10
- data/lib/gum/filters/prefix.rb +0 -15
- data/lib/gum/filters/range.rb +0 -22
- data/lib/gum/filters/regexp.rb +0 -11
- data/lib/gum/filters/term.rb +0 -15
- data/lib/gum/filters/terms.rb +0 -11
- data/lib/gum/filters/wildcard.rb +0 -15
- data/lib/gum/filters.rb +0 -35
- data/lib/gum/order.rb +0 -18
- data/lib/gum/search.rb +0 -83
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
module Gum
|
|
2
|
-
module Filters
|
|
3
|
-
class Geo
|
|
4
|
-
class Range < Filter
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
def __render__(value)
|
|
8
|
-
{
|
|
9
|
-
geo_distance_range: {
|
|
10
|
-
from: value[:from],
|
|
11
|
-
to: value[:to],
|
|
12
|
-
field => value[:lat_lon]
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def value_from(params)
|
|
18
|
-
{
|
|
19
|
-
from: params[:"#{param}_from"],
|
|
20
|
-
to: params[:"#{param}_to"],
|
|
21
|
-
lat_lon: params[:"#{param}"]
|
|
22
|
-
}
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def empty?(params)
|
|
26
|
-
params[:"#{param}"].blank? ||
|
|
27
|
-
params[:"#{param}_from"].blank? ||
|
|
28
|
-
params[:"#{param}_to"].blank?
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
data/lib/gum/filters/geo.rb
DELETED
data/lib/gum/filters/prefix.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Gum
|
|
2
|
-
module Filters
|
|
3
|
-
class Prefix < Filter
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
def __render__(value)
|
|
7
|
-
if options[:boost]
|
|
8
|
-
{ prefix: { field => { value: value, boost: options[:boost] } } }
|
|
9
|
-
else
|
|
10
|
-
{ prefix: { field => value } }
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
data/lib/gum/filters/range.rb
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
module Gum
|
|
2
|
-
module Filters
|
|
3
|
-
class Range < Filter
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
def __render__(value)
|
|
7
|
-
{ range: { field => value.update(options) } }
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def value_from(params)
|
|
11
|
-
{
|
|
12
|
-
gte: params[:"#{param}_from"],
|
|
13
|
-
lte: params[:"#{param}_to"]
|
|
14
|
-
}
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def empty?(params)
|
|
18
|
-
params[:"#{param}_from"].blank? || params[:"#{param}_to"].blank?
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
data/lib/gum/filters/regexp.rb
DELETED
data/lib/gum/filters/term.rb
DELETED
data/lib/gum/filters/terms.rb
DELETED
data/lib/gum/filters/wildcard.rb
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Gum
|
|
2
|
-
module Filters
|
|
3
|
-
class Wildcard < Filter
|
|
4
|
-
private
|
|
5
|
-
|
|
6
|
-
def __render__(value)
|
|
7
|
-
if options[:boost]
|
|
8
|
-
{ wildcard: { field => { value: value, boost: options[:boost] } } }
|
|
9
|
-
else
|
|
10
|
-
{ wildcard: { field => value } }
|
|
11
|
-
end
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
data/lib/gum/filters.rb
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
require 'gum/factory'
|
|
2
|
-
require 'gum/filter'
|
|
3
|
-
require 'gum/filters/term'
|
|
4
|
-
require 'gum/filters/terms'
|
|
5
|
-
require 'gum/filters/exists'
|
|
6
|
-
require 'gum/filters/prefix'
|
|
7
|
-
require 'gum/filters/wildcard'
|
|
8
|
-
require 'gum/filters/regexp'
|
|
9
|
-
require 'gum/filters/fuzzy'
|
|
10
|
-
require 'gum/filters/range'
|
|
11
|
-
require 'gum/filters/geo'
|
|
12
|
-
require 'gum/filters/geo/bbox'
|
|
13
|
-
require 'gum/filters/geo/distance'
|
|
14
|
-
require 'gum/filters/geo/range'
|
|
15
|
-
require 'gum/order'
|
|
16
|
-
|
|
17
|
-
module Gum
|
|
18
|
-
module Filters
|
|
19
|
-
def self.register(method, klass = nil)
|
|
20
|
-
define_method method do |*args|
|
|
21
|
-
Factory.build(klass || method, args) do |filter|
|
|
22
|
-
filters.push filter
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def self.define_filter(method, &block)
|
|
28
|
-
register method, Class.new(Gum::Filter, &block)
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
%i(term terms prefix wildcard regexp fuzzy exists geo range).each do |method|
|
|
32
|
-
register method
|
|
33
|
-
end
|
|
34
|
-
end
|
|
35
|
-
end
|
data/lib/gum/order.rb
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
module Gum
|
|
2
|
-
class OrderBy < Filter
|
|
3
|
-
ALLOWED_VALUES = %w(asc desc).freeze
|
|
4
|
-
|
|
5
|
-
def __render__(value)
|
|
6
|
-
{ field => value }
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def value_from(params)
|
|
10
|
-
value = super.to_s
|
|
11
|
-
ALLOWED_VALUES.include?(value) ? value : options[:default]
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def empty?(params)
|
|
15
|
-
ALLOWED_VALUES.exclude?(params[param].to_s) && options[:default].nil?
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
end
|
data/lib/gum/search.rb
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
module Gum
|
|
2
|
-
class Search
|
|
3
|
-
extend Filters
|
|
4
|
-
|
|
5
|
-
class_attribute :type
|
|
6
|
-
class_attribute :scope
|
|
7
|
-
class_attribute :fields
|
|
8
|
-
class_attribute :filters
|
|
9
|
-
class_attribute :orders
|
|
10
|
-
class_attribute :query_param
|
|
11
|
-
|
|
12
|
-
def self.inherited(klass)
|
|
13
|
-
klass.fields = Set.new
|
|
14
|
-
klass.filters = []
|
|
15
|
-
klass.orders = []
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
# @param [Chewy::Type] type
|
|
19
|
-
def self.use(type)
|
|
20
|
-
raise ArgumentError, 'type must be a Chewy::Type' unless type < Chewy::Type
|
|
21
|
-
self.type = type
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def self.scope(&block)
|
|
25
|
-
self.scope = block
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def self.searchable(*attrs)
|
|
29
|
-
self.fields += attrs.flatten
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def self.query(attr)
|
|
33
|
-
self.query_param = attr
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def self.order_by(*args)
|
|
37
|
-
Factory.build(Gum::OrderBy, args) do |order|
|
|
38
|
-
orders.push order
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def initialize(params)
|
|
43
|
-
@params = params
|
|
44
|
-
@q = params[query_param]
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def to_query
|
|
48
|
-
type.query(query).filter(compile_filters).order(compile_orders)
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def search
|
|
52
|
-
to_query.load(scope: scope)
|
|
53
|
-
rescue Elasticsearch::Transport::Transport::Errors::BadRequest => e
|
|
54
|
-
@error = e.message.match(/QueryParsingException\[([^;]+)\]/).try(:[], 1)
|
|
55
|
-
type.none
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
private
|
|
59
|
-
|
|
60
|
-
def compile_filters
|
|
61
|
-
filters.map do |filter|
|
|
62
|
-
filter.render(@params)
|
|
63
|
-
end.compact
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
def compile_orders
|
|
67
|
-
orders.map do |order|
|
|
68
|
-
order.render(@params)
|
|
69
|
-
end.compact
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
def query
|
|
73
|
-
return {} unless @q.present?
|
|
74
|
-
{
|
|
75
|
-
query_string: {
|
|
76
|
-
fields: fields.to_a,
|
|
77
|
-
query: @q,
|
|
78
|
-
default_operator: 'and'
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|