rice_cooker 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 +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
|