rice_cooker 0.1.7 → 0.1.8
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/lib/rice_cooker/base/helpers.rb +34 -3
- data/lib/rice_cooker/class_methods.rb +19 -1
- data/lib/rice_cooker/search.rb +11 -0
- data/lib/rice_cooker/version.rb +1 -1
- data/rice_cooker.gemspec +3 -3
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79a905f421f6309592feb240c8da2fb710cbebfa
|
4
|
+
data.tar.gz: 63b3dfbcbb3a4dd4ad9b9150c9c16caf9869d096
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3bd712a942907035e48a995a0997fd6434a1420bb6fefe5e272a77f5fe294ec4893ae4b09e7095d38a12b36244425891037c5e0b88a3c0c9d00d93537df09a7d
|
7
|
+
data.tar.gz: 299452845ba785aa6f18f3ce7958db7e189b1fd074c6dcb3221ab9b0730aea91697b7bdb3d39d17266382e7ad1ecab46af2aa5cfa3c12c857366ee6ae5a7f80d
|
@@ -48,15 +48,24 @@ module RiceCooker
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
-
# Overridable method for available
|
51
|
+
# Overridable method for available searchable fields
|
52
52
|
def searchable_fields_for(model)
|
53
53
|
if model.respond_to?(:searchable_fields)
|
54
|
-
model.
|
54
|
+
model.searchable_fields.map(&:to_sym)
|
55
55
|
else
|
56
56
|
filterable_fields_for(model)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
60
|
+
# Overridable method for available fuzzy fields
|
61
|
+
def fuzzy_fields_for(model)
|
62
|
+
if model.respond_to?(:fuzzy_fields)
|
63
|
+
model.fuzzy_fields.map(&:to_sym)
|
64
|
+
else
|
65
|
+
searchable_fields_for(model)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
60
69
|
# Overridable method for available rangeable fields
|
61
70
|
def rangeable_fields_for(model)
|
62
71
|
if model.respond_to?(:rangeable_fields)
|
@@ -177,6 +186,7 @@ module RiceCooker
|
|
177
186
|
return collection if collection.nil?
|
178
187
|
|
179
188
|
filtering_params.each do |field, value|
|
189
|
+
puts "Filtering param #{field} -> #{value}"
|
180
190
|
if additional.key?(field) && additional[field].key?(:proc)
|
181
191
|
|
182
192
|
# Si on a fourni des valeurs, on verifie qu'elle matchent
|
@@ -186,6 +196,8 @@ module RiceCooker
|
|
186
196
|
end
|
187
197
|
|
188
198
|
collection = collection.instance_exec(value, &(additional[field][:proc]))
|
199
|
+
elsif field =~ /_at$/ && (value.is_a?(String) || value.is_a?(Array))
|
200
|
+
collection = collection.where("DATE(#{field}) = ?", [*value])
|
189
201
|
elsif value.is_a?(String) || value.is_a?(Array)
|
190
202
|
collection = collection.where(field => value)
|
191
203
|
elsif value.is_a?(Hash) && value.key?(:proc)
|
@@ -274,6 +286,25 @@ module RiceCooker
|
|
274
286
|
col.where(reducer)
|
275
287
|
end
|
276
288
|
|
289
|
+
def reduce_fields_where(col, fields, value)
|
290
|
+
reducer = nil
|
291
|
+
fields.each do |f|
|
292
|
+
case col.model.columns.select{|e| e.name.to_sym == f.to_sym}.first.type
|
293
|
+
when :string
|
294
|
+
query = col.model.arel_table[f.to_sym].matches("%#{value.to_s}%")
|
295
|
+
when :integer
|
296
|
+
query = col.model.arel_table[f.to_sym].eq(value.to_i)
|
297
|
+
# when :boolean
|
298
|
+
# query = col.model.where(false)
|
299
|
+
else
|
300
|
+
query = false
|
301
|
+
end
|
302
|
+
|
303
|
+
reducer = (reducer ? reducer.or(query) : query) if query
|
304
|
+
end
|
305
|
+
col.where(reducer)
|
306
|
+
end
|
307
|
+
|
277
308
|
def apply_search_to_collection(col, searching_params, additional = {})
|
278
309
|
return col if col.nil?
|
279
310
|
|
@@ -281,7 +312,7 @@ module RiceCooker
|
|
281
312
|
if additional.key?(field) && additional[field].key?(:proc)
|
282
313
|
col = col.instance_exec(value, &(additional[field][:proc]))
|
283
314
|
elsif value.is_a?(String)
|
284
|
-
col = col.where(col.model.arel_table[field.to_sym].matches("%#{value.join(' ')}%"))
|
315
|
+
col = (col.where(col.model.arel_table[field.to_sym].matches("%#{value.join(' ')}%")) rescue col)
|
285
316
|
elsif value.is_a?(Array)
|
286
317
|
col = reduce_where(col, field, value)
|
287
318
|
elsif value.is_a?(Hash) && value.key?(:proc)
|
@@ -1,18 +1,24 @@
|
|
1
1
|
require 'active_support'
|
2
2
|
|
3
|
+
# require "pry"
|
4
|
+
|
3
5
|
module RiceCooker
|
4
6
|
module ClassMethods
|
5
7
|
protected
|
6
8
|
|
7
9
|
def initialize_model_class!
|
8
10
|
# First priority is the namespaced model, e.g. User::Group
|
11
|
+
# binding.pry
|
9
12
|
|
10
13
|
# Handle InhRes computing
|
11
|
-
|
14
|
+
# puts "[#{self}] In initialization, resource_class: #{self.respond_to?(:resource_class) && self.resource_class.inspect}"
|
15
|
+
if self.respond_to?(:resource_class) && self.resource_class
|
12
16
|
self.resource_model = self.resource_class
|
13
17
|
return self.resource_model
|
14
18
|
end
|
19
|
+
# binding.pry
|
15
20
|
|
21
|
+
# puts "[1/5] Resource model: #{self.resource_model.inspect}"
|
16
22
|
self.resource_model ||= begin
|
17
23
|
namespaced_class = name.sub(/Controller$/, '').singularize
|
18
24
|
namespaced_class.constantize
|
@@ -21,6 +27,7 @@ module RiceCooker
|
|
21
27
|
end
|
22
28
|
|
23
29
|
# Second priority is the top namespace model, e.g. EngineName::Article for EngineName::Admin::ArticlesController
|
30
|
+
# puts "[2/5] Resource model: #{self.resource_model.inspect}"
|
24
31
|
self.resource_model ||= begin
|
25
32
|
namespaced_classes = name.sub(/Controller$/, '').split('::')
|
26
33
|
namespaced_class = [namespaced_classes.first, namespaced_classes.last].join('::').singularize
|
@@ -29,7 +36,17 @@ module RiceCooker
|
|
29
36
|
nil
|
30
37
|
end
|
31
38
|
|
39
|
+
# Second second priority is the top namespace model, e.g. EngineName::Article for EngineName::Admin::ArticlesController
|
40
|
+
# puts "[3/5] Resource model: #{self.resource_model.inspect}"
|
41
|
+
self.resource_model ||= begin
|
42
|
+
namespaced_class = name.sub(/Controller$/, '').split('::')[1..3].join('::').singularize
|
43
|
+
namespaced_class.constantize
|
44
|
+
rescue NameError
|
45
|
+
nil
|
46
|
+
end
|
47
|
+
|
32
48
|
# Third priority the camelcased c, i.e. UserGroup
|
49
|
+
# puts "[4/5] Resource model: #{self.resource_model.inspect}"
|
33
50
|
self.resource_model ||= begin
|
34
51
|
camelcased_class = name.sub(/Controller$/, '').gsub('::', '').singularize
|
35
52
|
camelcased_class.constantize
|
@@ -38,6 +55,7 @@ module RiceCooker
|
|
38
55
|
end
|
39
56
|
|
40
57
|
# Otherwise use the Group class, or fail
|
58
|
+
# puts "[5/5] Resource model: #{self.resource_model.inspect}"
|
41
59
|
self.resource_model ||= begin
|
42
60
|
class_name = controller_name.classify
|
43
61
|
class_name.constantize
|
data/lib/rice_cooker/search.rb
CHANGED
@@ -30,6 +30,17 @@ module RiceCooker
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
+
def fuzzy_searched
|
34
|
+
cattr_accessor :fuzzy_keys
|
35
|
+
|
36
|
+
# On recupere tous les filtres autorisés
|
37
|
+
self.fuzzy_keys = fuzzy_fields_for(resource_model)
|
38
|
+
has_scope :fuzzy, only: [:index] do |_controller, scope, value|
|
39
|
+
scope = reduce_fields_where(scope, fuzzy_keys, value)
|
40
|
+
scope
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
33
44
|
# Ajoute un filtre custom
|
34
45
|
#
|
35
46
|
# name: le nom du filtre custom (ex: with_mark)
|
data/lib/rice_cooker/version.rb
CHANGED
data/rice_cooker.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.test_files = `git ls-files -- spec/*`.split(/\n/)
|
19
19
|
s.require_paths = ['lib']
|
20
20
|
|
21
|
-
s.add_dependency 'rails', '>= 4.2.0', '
|
22
|
-
s.add_dependency 'actionpack', '>= 4.2.0', '
|
23
|
-
s.add_dependency 'railties', '>= 4.2.0', '
|
21
|
+
s.add_dependency 'rails', '>= 4.2.0', '<= 5.1'
|
22
|
+
s.add_dependency 'actionpack', '>= 4.2.0', '<= 5.1'
|
23
|
+
s.add_dependency 'railties', '>= 4.2.0', '<= 5.1'
|
24
24
|
s.add_dependency 'has_scope', '~> 0.7.0', '>= 0.6.0'
|
25
25
|
|
26
26
|
s.add_development_dependency 'sqlite3'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rice_cooker
|
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
|
- Andre Aubin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -17,7 +17,7 @@ dependencies:
|
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 4.2.0
|
20
|
-
- - "
|
20
|
+
- - "<="
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '5.1'
|
23
23
|
type: :runtime
|
@@ -27,7 +27,7 @@ dependencies:
|
|
27
27
|
- - ">="
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 4.2.0
|
30
|
-
- - "
|
30
|
+
- - "<="
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '5.1'
|
33
33
|
- !ruby/object:Gem::Dependency
|
@@ -37,7 +37,7 @@ dependencies:
|
|
37
37
|
- - ">="
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
version: 4.2.0
|
40
|
-
- - "
|
40
|
+
- - "<="
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '5.1'
|
43
43
|
type: :runtime
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
- - ">="
|
48
48
|
- !ruby/object:Gem::Version
|
49
49
|
version: 4.2.0
|
50
|
-
- - "
|
50
|
+
- - "<="
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '5.1'
|
53
53
|
- !ruby/object:Gem::Dependency
|
@@ -57,7 +57,7 @@ dependencies:
|
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
59
|
version: 4.2.0
|
60
|
-
- - "
|
60
|
+
- - "<="
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '5.1'
|
63
63
|
type: :runtime
|
@@ -67,7 +67,7 @@ dependencies:
|
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: 4.2.0
|
70
|
-
- - "
|
70
|
+
- - "<="
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '5.1'
|
73
73
|
- !ruby/object:Gem::Dependency
|