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