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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b2552edc5a29457e713b7b2fa3c505a5a306f402
4
- data.tar.gz: 2c5b2b4dabb9a65006042602f29be764bacd3e79
3
+ metadata.gz: 79a905f421f6309592feb240c8da2fb710cbebfa
4
+ data.tar.gz: 63b3dfbcbb3a4dd4ad9b9150c9c16caf9869d096
5
5
  SHA512:
6
- metadata.gz: bc79b23fd67e5c673c052dd0a0a67f33cf11b64c0eac4baca51a349be02a05068c28f1e357e54a31897082fa1f47f777f29e22ce0004a2b73d3c9dd0e547b433
7
- data.tar.gz: 422b1198716ab050ffe818b4b72e1b2c25f52dd180284115fffdc8e4b14aad3bd2970c2cd104f50045b406e9a1842c6b43ea77a5602a96dbe969839ac858fdc9
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 rangeable fields
51
+ # Overridable method for available searchable fields
52
52
  def searchable_fields_for(model)
53
53
  if model.respond_to?(:searchable_fields)
54
- model.rangeable_fields.map(&:to_sym)
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
- if self.respond_to? :resource_class
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
@@ -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)
@@ -1,3 +1,3 @@
1
1
  module RiceCooker
2
- VERSION = '0.1.7'.freeze
2
+ VERSION = '0.1.8'.freeze
3
3
  end
@@ -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', '< 5.1'
22
- s.add_dependency 'actionpack', '>= 4.2.0', '< 5.1'
23
- s.add_dependency 'railties', '>= 4.2.0', '< 5.1'
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.7
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: 2016-10-18 00:00:00.000000000 Z
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