azahara_schema 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/azahara_schema/aggregation_attribute.rb +4 -0
- data/lib/azahara_schema/association_attribute.rb +4 -0
- data/lib/azahara_schema/attribute.rb +17 -9
- data/lib/azahara_schema/field_format.rb +8 -0
- data/lib/azahara_schema/schema.rb +16 -0
- data/lib/azahara_schema/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 1eef15c0c5196c94a0e0620ab5cfc9f651b95137d070155311f435d7eea2a2aa
|
4
|
+
data.tar.gz: 2e32dfd0f89bc3d5a86cd752df9a92dc45c2e8a475534a1f12dfea430c6b74c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 655ebda633024e86f39c2cd8bc88ac5ac4b8452c27f2929c96e42a1d6145248cf424c8985bbc61b137be3be8b9ccd6639b28d2596a3d094100903b59a96a306e
|
7
|
+
data.tar.gz: 2561c92dd7dcf913289b9250662b259c3b3bf89bddb7c6009a174ff69503b0acb445597264845e3ab99fbfe3fad4921ac5cdc8f28da46cd2441cd992b39b13bb
|
@@ -55,32 +55,40 @@ module AzaharaSchema
|
|
55
55
|
format.aggregable?
|
56
56
|
end
|
57
57
|
|
58
|
-
def
|
59
|
-
|
58
|
+
def searchable?
|
59
|
+
format.searchable?
|
60
60
|
end
|
61
61
|
|
62
|
-
def
|
63
|
-
|
62
|
+
def value(record)
|
63
|
+
record.public_send(name)
|
64
64
|
end
|
65
65
|
|
66
|
-
def
|
66
|
+
def arel_statement(operator, values)
|
67
67
|
values = [values] unless values.is_a?(Array)
|
68
68
|
case operator
|
69
69
|
when '='
|
70
|
-
|
70
|
+
arel_field.in(values)
|
71
71
|
when '~'
|
72
72
|
arl = arel_field.matches("%#{values[0]}%")
|
73
73
|
values[1..-1].each{|v| arl = arl.or( arel_field.matches("%#{v}%") ) }
|
74
|
-
|
74
|
+
arl
|
75
75
|
when '>='
|
76
|
-
|
76
|
+
arel_field.gteq(values.map(&:to_f).min)
|
77
77
|
when '<='
|
78
|
-
|
78
|
+
arel_field.lteq(values.map(&:to_f).max)
|
79
79
|
else
|
80
80
|
throw 'Unknown operator ' + operator.to_s
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
def add_preload(scope)
|
85
|
+
scope
|
86
|
+
end
|
87
|
+
|
88
|
+
def add_statement(scope, operator, values)
|
89
|
+
scope.where(arel_statement(operator, values))
|
90
|
+
end
|
91
|
+
|
84
92
|
def add_sort(scope, order)
|
85
93
|
scope.order( arel_sort_field.public_send(order) )
|
86
94
|
end
|
@@ -51,6 +51,10 @@ module AzaharaSchema
|
|
51
51
|
def aggregable?
|
52
52
|
false
|
53
53
|
end
|
54
|
+
|
55
|
+
def searchable?
|
56
|
+
false
|
57
|
+
end
|
54
58
|
end
|
55
59
|
|
56
60
|
class NumberFormat < Base
|
@@ -85,6 +89,10 @@ module AzaharaSchema
|
|
85
89
|
def available_operators
|
86
90
|
super.concat(['~'])
|
87
91
|
end
|
92
|
+
|
93
|
+
def searchable?
|
94
|
+
true
|
95
|
+
end
|
88
96
|
end
|
89
97
|
|
90
98
|
class ListFormat < StringFormat
|
@@ -30,6 +30,7 @@ module AzaharaSchema
|
|
30
30
|
end
|
31
31
|
|
32
32
|
attr_accessor :model, :association, :parent_schema
|
33
|
+
attr_accessor :search_query
|
33
34
|
|
34
35
|
def initialize(model, **attributes)
|
35
36
|
@model = model
|
@@ -38,6 +39,10 @@ module AzaharaSchema
|
|
38
39
|
@column_names = attributes[:columns]
|
39
40
|
end
|
40
41
|
|
42
|
+
def searchable_attributes
|
43
|
+
@searchable_attributes ||= available_attributes.select{|a| a.searchable? }
|
44
|
+
end
|
45
|
+
|
41
46
|
def column_names=(values)
|
42
47
|
@column_names = values
|
43
48
|
@columns = nil
|
@@ -189,6 +194,10 @@ module AzaharaSchema
|
|
189
194
|
Outputs.new(self)
|
190
195
|
end
|
191
196
|
|
197
|
+
def tokenize_search_query(query=search_query)
|
198
|
+
query.split if query
|
199
|
+
end
|
200
|
+
|
192
201
|
def entities
|
193
202
|
scope = model.respond_to?(:visible) ? model.visible : model.all
|
194
203
|
columns.each do |col|
|
@@ -201,6 +210,11 @@ module AzaharaSchema
|
|
201
210
|
att = attribute(name)
|
202
211
|
scope = att.add_sort(scope, order) if att
|
203
212
|
end
|
213
|
+
if (tokens = tokenize_search_query)
|
214
|
+
arl = searchable_attributes[0].arel_statement('~', tokens) if searchable_attributes.any?
|
215
|
+
Array(searchable_attributes[1..-1]).each{|att| arl = arl.or( att.arel_statement('~', tokens) ) }
|
216
|
+
scope = scope.where(arl)
|
217
|
+
end
|
204
218
|
scope
|
205
219
|
end
|
206
220
|
|
@@ -240,6 +254,7 @@ module AzaharaSchema
|
|
240
254
|
add_sort(sort[:path], sort['desc'] == 'true' ? :desc : :asc )
|
241
255
|
end
|
242
256
|
end
|
257
|
+
self.search_query = params[:q] if params[:q]
|
243
258
|
end
|
244
259
|
|
245
260
|
def to_param
|
@@ -249,6 +264,7 @@ module AzaharaSchema
|
|
249
264
|
params[:f][fname] = "#{attrs[:o]}|#{attrs[:v]}"
|
250
265
|
end
|
251
266
|
params[:c] = column_names
|
267
|
+
params[:q] = search_query if params[:q]
|
252
268
|
params
|
253
269
|
end
|
254
270
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: azahara_schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ondřej Ezr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
version: '0'
|
98
98
|
requirements: []
|
99
99
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.
|
100
|
+
rubygems_version: 2.7.0
|
101
101
|
signing_key:
|
102
102
|
specification_version: 4
|
103
103
|
summary: Gem to support developement of rails application with schema over an entity
|