rice_cooker 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile +0 -12
- data/Gemfile.lock +4 -23
- data/lib/rice_cooker/class_methods.rb +57 -0
- data/lib/rice_cooker/filter.rb +6 -8
- data/lib/rice_cooker/helpers.rb +5 -50
- data/lib/rice_cooker/range.rb +1 -3
- data/lib/rice_cooker/sort.rb +8 -9
- data/lib/rice_cooker/version.rb +1 -1
- data/lib/rice_cooker.rb +20 -8
- data/rice_cooker.gemspec +0 -3
- data/spec/range/range_spec.rb +23 -31
- metadata +3 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: febeec59cbb060cf35bb66891a2c3017876f6263
|
4
|
+
data.tar.gz: 80ec86ea16fc1496809c648789e937e7592332a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b54debc8ddc3c88ae32a8b2eff042e4c1fa14bd73b6ccbc9ac32b0e2bb8c95b26db833186eadee1ac80639dad42037b69940cc4a7e4121f0c58272941525897
|
7
|
+
data.tar.gz: 3d46fbf0f23c24ef4afa1c01e72612a843f8b28cdc10db72ac5d8d4d39558cb9f2b7c2090d0d1ca952e02b97adb37a28edfedf159fdc90b5247a9eb620b72e2a
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -1,14 +1,2 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
|
-
|
3
|
-
# Declare your gem's dependencies in rice_cooker.gemspec.
|
4
|
-
# Bundler will treat runtime dependencies like base dependencies, and
|
5
|
-
# development dependencies will be added by default to the :development group.
|
6
2
|
gemspec
|
7
|
-
|
8
|
-
# Declare any dependencies that are still in development here instead of in
|
9
|
-
# your gemspec. These might include edge Rails or gems from your path or
|
10
|
-
# Git. Remember to move these dependencies to your gemspec before releasing
|
11
|
-
# your gem to rubygems.org.
|
12
|
-
|
13
|
-
# To use a debugger
|
14
|
-
# gem 'byebug', group: [:development, :test]
|
data/Gemfile.lock
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
rice_cooker (0.1.
|
5
|
-
actionpack (
|
4
|
+
rice_cooker (0.1.3)
|
5
|
+
actionpack (>= 4.2.0, < 5.1)
|
6
6
|
has_scope (~> 0.7.0, >= 0.6.0)
|
7
|
-
rails (
|
8
|
-
railties (
|
7
|
+
rails (>= 4.2.0, < 5.1)
|
8
|
+
railties (>= 4.2.0, < 5.1)
|
9
9
|
|
10
10
|
GEM
|
11
11
|
remote: https://rubygems.org/
|
@@ -49,21 +49,10 @@ GEM
|
|
49
49
|
tzinfo (~> 1.1)
|
50
50
|
arel (7.0.0)
|
51
51
|
ast (2.3.0)
|
52
|
-
benchmark-ips (2.6.1)
|
53
52
|
builder (3.2.2)
|
54
53
|
coderay (1.1.1)
|
55
54
|
concurrent-ruby (1.0.2)
|
56
55
|
database_cleaner (1.5.3)
|
57
|
-
derailed (0.1.0)
|
58
|
-
derailed_benchmarks
|
59
|
-
derailed_benchmarks (1.3.1)
|
60
|
-
benchmark-ips (~> 2)
|
61
|
-
get_process_mem (~> 0)
|
62
|
-
heapy (~> 0)
|
63
|
-
memory_profiler (~> 0)
|
64
|
-
rack (>= 1)
|
65
|
-
rake (> 10, < 12)
|
66
|
-
thor (~> 0.19)
|
67
56
|
diff-lcs (1.2.5)
|
68
57
|
docile (1.1.5)
|
69
58
|
erubis (2.7.0)
|
@@ -74,20 +63,17 @@ GEM
|
|
74
63
|
railties (>= 3.0.0)
|
75
64
|
faker (1.6.1)
|
76
65
|
i18n (~> 0.5)
|
77
|
-
get_process_mem (0.2.1)
|
78
66
|
globalid (0.3.6)
|
79
67
|
activesupport (>= 4.1.0)
|
80
68
|
has_scope (0.7.0)
|
81
69
|
actionpack (>= 4.1, < 5.1)
|
82
70
|
activesupport (>= 4.1, < 5.1)
|
83
|
-
heapy (0.1.2)
|
84
71
|
i18n (0.7.0)
|
85
72
|
json (1.8.3)
|
86
73
|
loofah (2.0.3)
|
87
74
|
nokogiri (>= 1.5.9)
|
88
75
|
mail (2.6.4)
|
89
76
|
mime-types (>= 1.16, < 4)
|
90
|
-
memory_profiler (0.9.6)
|
91
77
|
metaclass (0.0.4)
|
92
78
|
method_source (0.8.2)
|
93
79
|
mime-types (3.1)
|
@@ -130,7 +116,6 @@ GEM
|
|
130
116
|
nokogiri (~> 1.6.0)
|
131
117
|
rails-html-sanitizer (1.0.3)
|
132
118
|
loofah (~> 2.0)
|
133
|
-
rails-perftest (0.0.6)
|
134
119
|
railties (5.0.0)
|
135
120
|
actionpack (= 5.0.0)
|
136
121
|
activesupport (= 5.0.0)
|
@@ -186,7 +171,6 @@ GEM
|
|
186
171
|
activesupport (>= 4.0)
|
187
172
|
sprockets (>= 3.0.0)
|
188
173
|
sqlite3 (1.3.11)
|
189
|
-
stackprof (0.2.9)
|
190
174
|
test-unit (3.1.3)
|
191
175
|
power_assert
|
192
176
|
thor (0.19.1)
|
@@ -203,12 +187,10 @@ PLATFORMS
|
|
203
187
|
|
204
188
|
DEPENDENCIES
|
205
189
|
database_cleaner
|
206
|
-
derailed
|
207
190
|
factory_girl_rails (~> 4.0)
|
208
191
|
faker (= 1.6.1)
|
209
192
|
mocha (= 1.1.0)
|
210
193
|
pry
|
211
|
-
rails-perftest (= 0.0.6)
|
212
194
|
rice_cooker!
|
213
195
|
rspec
|
214
196
|
rspec-activemodel-mocks
|
@@ -217,7 +199,6 @@ DEPENDENCIES
|
|
217
199
|
ruby-prof (= 0.15.8)
|
218
200
|
simplecov (= 0.11.1)
|
219
201
|
sqlite3
|
220
|
-
stackprof
|
221
202
|
test-unit (= 3.1.3)
|
222
203
|
|
223
204
|
BUNDLED WITH
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
|
3
|
+
module RiceCooker
|
4
|
+
module ClassMethods
|
5
|
+
protected
|
6
|
+
|
7
|
+
def initialize_model_class!
|
8
|
+
# First priority is the namespaced model, e.g. User::Group
|
9
|
+
self.resource_model ||= begin
|
10
|
+
namespaced_class = name.sub(/Controller$/, '').singularize
|
11
|
+
namespaced_class.constantize
|
12
|
+
rescue NameError
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
|
16
|
+
# Second priority is the top namespace model, e.g. EngineName::Article for EngineName::Admin::ArticlesController
|
17
|
+
self.resource_model ||= begin
|
18
|
+
namespaced_classes = name.sub(/Controller$/, '').split('::')
|
19
|
+
namespaced_class = [namespaced_classes.first, namespaced_classes.last].join('::').singularize
|
20
|
+
namespaced_class.constantize
|
21
|
+
rescue NameError
|
22
|
+
nil
|
23
|
+
end
|
24
|
+
|
25
|
+
# Third priority the camelcased c, i.e. UserGroup
|
26
|
+
self.resource_model ||= begin
|
27
|
+
camelcased_class = name.sub(/Controller$/, '').gsub('::', '').singularize
|
28
|
+
camelcased_class.constantize
|
29
|
+
rescue NameError
|
30
|
+
nil
|
31
|
+
end
|
32
|
+
|
33
|
+
# Otherwise use the Group class, or fail
|
34
|
+
self.resource_model ||= begin
|
35
|
+
class_name = controller_name.classify
|
36
|
+
class_name.constantize
|
37
|
+
rescue NameError => e
|
38
|
+
raise unless e.message.include?(class_name)
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# We prevent for creating a resource wich is not a model
|
43
|
+
if self.resource_model
|
44
|
+
begin
|
45
|
+
self.resource_model = nil unless self.resource_model < ActiveRecord::Base
|
46
|
+
rescue
|
47
|
+
nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def inherited(base) #:nodoc:
|
53
|
+
super(base)
|
54
|
+
base.send :initialize_model_class!
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/rice_cooker/filter.rb
CHANGED
@@ -13,16 +13,14 @@ module RiceCooker
|
|
13
13
|
cattr_accessor :filtering_keys
|
14
14
|
cattr_accessor :custom_filters
|
15
15
|
|
16
|
-
resource_class ||= controller_resource_class(self)# unless respond_to?(:resource_class)
|
17
|
-
|
18
16
|
# On normalize tout ca
|
19
17
|
additional_filtering_params = format_additional_param(additional_filtering_params, 'filtering')
|
20
18
|
|
21
19
|
# On recupere tous les filtres autorisés
|
22
|
-
allowed_keys = (filterable_fields_for(
|
20
|
+
allowed_keys = (filterable_fields_for(resource_model) + additional_filtering_params.keys)
|
23
21
|
|
24
22
|
# On fait une sorte de *register_bool_filter* sur tous les champs *_at
|
25
|
-
additional = (filterable_fields_for(
|
23
|
+
additional = (filterable_fields_for(resource_model) - [:created_at, :updated_at])
|
26
24
|
.select { |e| e =~ /_at$/ }
|
27
25
|
.select { |e| additional_filtering_params[e.to_s.gsub(/_at$/, '')].nil? }
|
28
26
|
|
@@ -30,18 +28,18 @@ module RiceCooker
|
|
30
28
|
name = fi.to_s.gsub(/_at$/, '')
|
31
29
|
|
32
30
|
if fi.to_sym == :begin_at
|
33
|
-
db_field = "#{
|
31
|
+
db_field = "#{resource_model.quoted_table_name}.\"#{fi}\""
|
34
32
|
additional_filtering_params[:future] = {
|
35
33
|
proc: -> (value) { value.first == 'true' ? where("#{db_field} >= ?", Time.zone.now) : where("#{db_field} < ?", Time.zone.now) },
|
36
34
|
all: %w(true false),
|
37
|
-
description: "Return only #{
|
35
|
+
description: "Return only #{resource_model.to_s.underscore.humanize.downcase.pluralize} which begins in the future"
|
38
36
|
}
|
39
37
|
allowed_keys << :future
|
40
38
|
else
|
41
39
|
additional_filtering_params[name.to_sym] = {
|
42
40
|
proc: -> (value) { value.first == 'true' ? where.not(fi => nil) : where(fi => nil) },
|
43
41
|
all: %w(true false),
|
44
|
-
description: "Return only #{name} #{
|
42
|
+
description: "Return only #{name} #{resource_model.to_s.underscore.humanize.downcase.pluralize}"
|
45
43
|
}
|
46
44
|
allowed_keys << name
|
47
45
|
end
|
@@ -88,7 +86,7 @@ module RiceCooker
|
|
88
86
|
custom_filters[name] = {
|
89
87
|
proc: -> (value) { value.first == 'true' ? where.not(field => nil) : where(field => nil) },
|
90
88
|
all: %w(true false),
|
91
|
-
description: description || "Return only #{
|
89
|
+
description: description || "Return only #{resource_model.to_s.underscore.humanize.downcase.pluralize} with a #{field}"
|
92
90
|
}
|
93
91
|
filtering_keys << name
|
94
92
|
end
|
data/lib/rice_cooker/helpers.rb
CHANGED
@@ -20,50 +20,6 @@ module RiceCooker
|
|
20
20
|
module Helpers
|
21
21
|
extend ActiveSupport::Concern
|
22
22
|
|
23
|
-
# From https://github.com/josevalim/inherited_resources/blob/master/lib/inherited_resources/class_methods.rb#L315
|
24
|
-
def controller_resource_class(controller)
|
25
|
-
detected_resource_class = nil
|
26
|
-
|
27
|
-
if controller.respond_to? :name
|
28
|
-
detected_resource_class ||= begin
|
29
|
-
namespaced_class = controller.name.sub(/Controller$/, '').singularize
|
30
|
-
namespaced_class.constantize
|
31
|
-
rescue NameError
|
32
|
-
nil
|
33
|
-
end
|
34
|
-
|
35
|
-
# Second priority is the top namespace model, e.g. EngineName::Article for EngineName::Admin::ArticlesController
|
36
|
-
detected_resource_class ||= begin
|
37
|
-
namespaced_classes = controller.name.sub(/Controller$/, '').split('::')
|
38
|
-
namespaced_class = [namespaced_classes.first, namespaced_classes.last].join('::').singularize
|
39
|
-
namespaced_class.constantize
|
40
|
-
rescue NameError
|
41
|
-
nil
|
42
|
-
end
|
43
|
-
|
44
|
-
# Third priority the camelcased c, i.e. UserGroup
|
45
|
-
detected_resource_class ||= begin
|
46
|
-
camelcased_class = controller.name.sub(/Controller$/, '').gsub('::', '').singularize
|
47
|
-
camelcased_class.constantize
|
48
|
-
rescue NameError
|
49
|
-
nil
|
50
|
-
end
|
51
|
-
|
52
|
-
elsif controller.respond_to? :controller_name
|
53
|
-
# Otherwise use the Group class, or fail
|
54
|
-
detected_resource_class ||= begin
|
55
|
-
class_name = controller.controller_name.classify
|
56
|
-
class_name.constantize
|
57
|
-
rescue NameError => e
|
58
|
-
raise unless e.message.include?(class_name)
|
59
|
-
nil
|
60
|
-
end
|
61
|
-
else
|
62
|
-
detected_resource_class = nil
|
63
|
-
end
|
64
|
-
detected_resource_class
|
65
|
-
end
|
66
|
-
|
67
23
|
# Overridable method for available sortable fields
|
68
24
|
def sortable_fields_for(model)
|
69
25
|
if model.respond_to?(:sortable_fields)
|
@@ -102,11 +58,11 @@ module RiceCooker
|
|
102
58
|
return {} unless sorting_param.present?
|
103
59
|
|
104
60
|
sorting_params = CSV.parse_line(URI.unescape(sorting_param)).collect do |sort|
|
105
|
-
if sort.start_with?('-')
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
61
|
+
sorting_param = if sort.start_with?('-')
|
62
|
+
{ field: sort[1..-1].to_s.to_sym, direction: :desc }
|
63
|
+
else
|
64
|
+
{ field: sort.to_s.to_sym, direction: :asc }
|
65
|
+
end
|
110
66
|
|
111
67
|
check_sorting_param(model, sorting_param)
|
112
68
|
sorting_param
|
@@ -253,7 +209,6 @@ module RiceCooker
|
|
253
209
|
raise InvalidRangeException, "Attributes #{🔞.map(&:to_s).to_sentence} doesn't exists or aren't rangeables. Available ranges are: #{allowed.to_sentence}" if 🔞.any?
|
254
210
|
end
|
255
211
|
|
256
|
-
|
257
212
|
def apply_range_to_collection(collection, ranged_params, additional = {})
|
258
213
|
return collection if collection.nil?
|
259
214
|
|
data/lib/rice_cooker/range.rb
CHANGED
@@ -13,13 +13,11 @@ module RiceCooker
|
|
13
13
|
cattr_accessor :ranged_keys
|
14
14
|
cattr_accessor :custom_ranges
|
15
15
|
|
16
|
-
resource_class ||= controller_resource_class(self) unless respond_to?(:resource_class)
|
17
|
-
|
18
16
|
# On normalize tout ca
|
19
17
|
additional_ranged_params = format_additional_param(additional_ranged_params, 'ranged')
|
20
18
|
|
21
19
|
# On recupere tous les filtres autorisés
|
22
|
-
allowed_keys = (rangeable_fields_for(
|
20
|
+
allowed_keys = (rangeable_fields_for(resource_model) + additional_ranged_params.keys)
|
23
21
|
|
24
22
|
# On recupere le default
|
25
23
|
self.ranged_keys = allowed_keys
|
data/lib/rice_cooker/sort.rb
CHANGED
@@ -21,28 +21,27 @@ module RiceCooker
|
|
21
21
|
cattr_accessor :default_order
|
22
22
|
cattr_accessor :sorted_keys
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
return unless sorted_keys.nil? || resource_class.nil?
|
24
|
+
return unless sorted_keys.nil? || resource_model.nil?
|
27
25
|
|
28
26
|
default_sorting_params = { default_sorting_params => :asc } if default_sorting_params.is_a? Symbol
|
29
27
|
|
30
28
|
# On recupere le default
|
31
29
|
self.default_order = default_sorting_params
|
32
|
-
self.sorted_keys = (
|
30
|
+
self.sorted_keys = (resource_model.respond_to?(:sortable_fields) ? resource_model.sortable_fields : [])
|
33
31
|
default_sort = param_from_defaults(default_sorting_params)
|
34
32
|
|
35
33
|
has_scope :sort, default: default_sort, only: [:index] do |controller, scope, value|
|
36
|
-
if controller.params[SORT_PARAM].present?
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
34
|
+
scope = if controller.params[SORT_PARAM].present?
|
35
|
+
apply_sort_to_collection(scope, parse_sorting_param(value, resource_model))
|
36
|
+
else
|
37
|
+
apply_sort_to_collection(scope, default_sorting_params)
|
38
|
+
end
|
41
39
|
scope
|
42
40
|
end
|
43
41
|
|
44
42
|
rescue NoMethodError => e
|
45
43
|
"Just wanna die ⚓️ #{e}"
|
44
|
+
super
|
46
45
|
end
|
47
46
|
end
|
48
47
|
end
|
data/lib/rice_cooker/version.rb
CHANGED
data/lib/rice_cooker.rb
CHANGED
@@ -1,17 +1,29 @@
|
|
1
1
|
require 'action_controller'
|
2
2
|
|
3
3
|
module RiceCooker
|
4
|
-
autoload :Helpers,
|
5
|
-
autoload :
|
6
|
-
autoload :
|
7
|
-
autoload :
|
8
|
-
autoload :
|
4
|
+
autoload :Helpers, 'rice_cooker/helpers'
|
5
|
+
autoload :ClassMethods, 'rice_cooker/class_methods'
|
6
|
+
autoload :Filter, 'rice_cooker/filter'
|
7
|
+
autoload :Sort, 'rice_cooker/sort'
|
8
|
+
autoload :Range, 'rice_cooker/range'
|
9
|
+
autoload :VERSION, 'rice_cooker/version'
|
9
10
|
end
|
10
11
|
|
11
12
|
module ActionController
|
12
13
|
class Base
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
def self.rice_cooked(base)
|
15
|
+
base.class_eval do
|
16
|
+
include RiceCooker::Sort
|
17
|
+
include RiceCooker::Filter
|
18
|
+
include RiceCooker::Range
|
19
|
+
extend RiceCooker::ClassMethods
|
20
|
+
|
21
|
+
class_attribute :resource_model, instance_writer: false
|
22
|
+
|
23
|
+
protected :resource_model
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
rice_cooked(self)
|
16
28
|
end
|
17
29
|
end
|
data/rice_cooker.gemspec
CHANGED
@@ -30,13 +30,10 @@ Gem::Specification.new do |s|
|
|
30
30
|
s.add_development_dependency 'mocha', '1.1.0'
|
31
31
|
s.add_development_dependency 'ruby-prof', '0.15.8'
|
32
32
|
s.add_development_dependency 'test-unit', '3.1.3'
|
33
|
-
s.add_development_dependency 'rails-perftest', '0.0.6'
|
34
33
|
s.add_development_dependency 'simplecov', '0.11.1'
|
35
34
|
s.add_development_dependency 'factory_girl_rails', '~> 4.0'
|
36
35
|
s.add_development_dependency 'database_cleaner'
|
37
36
|
s.add_development_dependency 'faker', '1.6.1'
|
38
37
|
s.add_development_dependency 'pry'
|
39
|
-
s.add_development_dependency 'derailed'
|
40
|
-
s.add_development_dependency 'stackprof'
|
41
38
|
s.add_development_dependency 'rubocop', '~> 0.40.0'
|
42
39
|
end
|
data/spec/range/range_spec.rb
CHANGED
@@ -90,20 +90,19 @@ RSpec.describe RiceCooker::Range do
|
|
90
90
|
# Desc ranged
|
91
91
|
expect do
|
92
92
|
apply_range_to_collection(@collection, login: %w(aaubin qbollach andre),
|
93
|
-
|
93
|
+
id: ['74'])
|
94
94
|
end.to raise_error(RiceCooker::InvalidRangeValueException)
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
98
|
describe 'Must apply custom ranges to given collection' do
|
99
|
-
|
100
99
|
it 'Default null ranged' do
|
101
100
|
ranged_collection = apply_range_to_collection(@collection, {}, @test_range)
|
102
101
|
expect(ranged_collection.to_sql).to match(/^((?!WHERE).)*$/)
|
103
102
|
end
|
104
103
|
|
105
104
|
it 'Default ranged' do
|
106
|
-
ranged_collection = apply_range_to_collection(@collection, {between_the_letter:
|
105
|
+
ranged_collection = apply_range_to_collection(@collection, { between_the_letter: %w(a b) }, @test_range)
|
107
106
|
expect(ranged_collection.to_sql).to match(/WHERE/)
|
108
107
|
expect(ranged_collection.to_sql).to match(/BETWEEN/)
|
109
108
|
end
|
@@ -111,9 +110,9 @@ RSpec.describe RiceCooker::Range do
|
|
111
110
|
it 'Double ranged' do
|
112
111
|
# Desc ranged
|
113
112
|
ranged_collection = apply_range_to_collection(@collection, {
|
114
|
-
|
115
|
-
|
116
|
-
|
113
|
+
between_the_letter: %w(a b),
|
114
|
+
not_between_the_letter: %w(x z)
|
115
|
+
}, @test_range)
|
117
116
|
expect(ranged_collection.to_sql).to match(/WHERE/)
|
118
117
|
expect(ranged_collection.to_sql).to match(/first_name BETWEEN 'a' AND 'b'/)
|
119
118
|
expect(ranged_collection.to_sql).to match(/AND \(first_name NOT BETWEEN 'x' AND 'z'\)/)
|
@@ -121,10 +120,8 @@ RSpec.describe RiceCooker::Range do
|
|
121
120
|
|
122
121
|
it 'Multiple ranged' do
|
123
122
|
# Desc ranged
|
124
|
-
ranged_collection = apply_range_to_collection(@collection,
|
125
|
-
|
126
|
-
id: ['74', '76']
|
127
|
-
})
|
123
|
+
ranged_collection = apply_range_to_collection(@collection, login: %w(aaubin qbollach),
|
124
|
+
id: %w(74 76))
|
128
125
|
expect(ranged_collection.to_sql).to match(/WHERE/)
|
129
126
|
expect(ranged_collection.to_sql).to match(/BETWEEN 'aaubin' AND 'qbollach'/)
|
130
127
|
expect(ranged_collection.to_sql).to match(/\) AND \(/)
|
@@ -136,75 +133,71 @@ RSpec.describe RiceCooker::Range do
|
|
136
133
|
expect do
|
137
134
|
apply_range_to_collection(
|
138
135
|
@collection,
|
139
|
-
{sorted:
|
140
|
-
format_additional_param({sorted: [-> (v,
|
136
|
+
{ sorted: %w(true baguette) },
|
137
|
+
format_additional_param({ sorted: [-> (v, _w) { v }, %w(true false maybe)] }, 'ranged')
|
141
138
|
)
|
142
139
|
end.to raise_error(RiceCooker::InvalidRangeValueException)
|
143
140
|
end
|
144
141
|
end
|
145
142
|
|
146
143
|
describe 'Additional params must be correctly formated' do
|
147
|
-
|
148
144
|
it 'No additional params' do
|
149
145
|
formated = format_additional_param({}, 'ranged')
|
150
146
|
expect(formated).to be_eql({})
|
151
147
|
end
|
152
148
|
|
153
149
|
it 'Already correctly formatted additional params' do
|
154
|
-
p = {range: {
|
150
|
+
p = { range: {
|
155
151
|
proc: @proc,
|
156
152
|
all: [1, 2, 3],
|
157
153
|
description: 'A good filter'
|
158
|
-
}}
|
154
|
+
} }
|
159
155
|
formated = format_additional_param(p, 'ranged')
|
160
156
|
expect(formated).to be_eql(p)
|
161
157
|
end
|
162
158
|
|
163
159
|
it 'Missing description additional params' do
|
164
|
-
p = {filter: {
|
160
|
+
p = { filter: {
|
165
161
|
proc: @proc,
|
166
162
|
all: [1, 2, 3]
|
167
|
-
}}
|
168
|
-
expected = {filter: {
|
163
|
+
} }
|
164
|
+
expected = { filter: {
|
169
165
|
proc: @proc,
|
170
166
|
all: [1, 2, 3],
|
171
167
|
description: ''
|
172
|
-
}}
|
168
|
+
} }
|
173
169
|
formated = format_additional_param(p, 'ranged')
|
174
170
|
expect(formated).to be_eql(expected)
|
175
171
|
end
|
176
172
|
|
177
173
|
it 'Only proc additional params' do
|
178
|
-
|
179
|
-
|
180
|
-
expected = {filter: {
|
174
|
+
p = { filter: @proc }
|
175
|
+
expected = { filter: {
|
181
176
|
proc: @proc,
|
182
177
|
all: [],
|
183
178
|
description: ''
|
184
|
-
}}
|
179
|
+
} }
|
185
180
|
formated = format_additional_param(p, 'ranged')
|
186
181
|
expect(formated).to be_eql(expected)
|
187
182
|
end
|
188
183
|
|
189
184
|
it 'Array with proc and all additional params' do
|
190
|
-
|
191
|
-
|
192
|
-
expected = {filter: {
|
185
|
+
p = { filter: [@proc, @all] }
|
186
|
+
expected = { filter: {
|
193
187
|
proc: @proc,
|
194
188
|
all: @all,
|
195
189
|
description: ''
|
196
|
-
}}
|
190
|
+
} }
|
197
191
|
formated = format_additional_param(p, 'ranged')
|
198
192
|
expect(formated).to be_eql(expected)
|
199
193
|
end
|
200
194
|
|
201
195
|
it 'Multiple, std + Array with proc and all additional params' do
|
202
|
-
|
203
196
|
p = {
|
204
197
|
tata: @proc,
|
205
|
-
toto: {proc: @proc, all: [1, 2]},
|
198
|
+
toto: { proc: @proc, all: [1, 2] },
|
206
199
|
filter: [@proc, @all],
|
207
|
-
tutu: {proc: @proc, description: 'Buuuuh'}
|
200
|
+
tutu: { proc: @proc, description: 'Buuuuh' }
|
208
201
|
}
|
209
202
|
expected = {
|
210
203
|
tata: {
|
@@ -231,7 +224,6 @@ RSpec.describe RiceCooker::Range do
|
|
231
224
|
formated = format_additional_param(p, 'ranged')
|
232
225
|
expect(formated).to be_eql(expected)
|
233
226
|
end
|
234
|
-
|
235
227
|
end
|
236
228
|
end
|
237
229
|
|
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.3
|
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-07-
|
11
|
+
date: 2016-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -188,20 +188,6 @@ dependencies:
|
|
188
188
|
- - '='
|
189
189
|
- !ruby/object:Gem::Version
|
190
190
|
version: 3.1.3
|
191
|
-
- !ruby/object:Gem::Dependency
|
192
|
-
name: rails-perftest
|
193
|
-
requirement: !ruby/object:Gem::Requirement
|
194
|
-
requirements:
|
195
|
-
- - '='
|
196
|
-
- !ruby/object:Gem::Version
|
197
|
-
version: 0.0.6
|
198
|
-
type: :development
|
199
|
-
prerelease: false
|
200
|
-
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
requirements:
|
202
|
-
- - '='
|
203
|
-
- !ruby/object:Gem::Version
|
204
|
-
version: 0.0.6
|
205
191
|
- !ruby/object:Gem::Dependency
|
206
192
|
name: simplecov
|
207
193
|
requirement: !ruby/object:Gem::Requirement
|
@@ -272,34 +258,6 @@ dependencies:
|
|
272
258
|
- - ">="
|
273
259
|
- !ruby/object:Gem::Version
|
274
260
|
version: '0'
|
275
|
-
- !ruby/object:Gem::Dependency
|
276
|
-
name: derailed
|
277
|
-
requirement: !ruby/object:Gem::Requirement
|
278
|
-
requirements:
|
279
|
-
- - ">="
|
280
|
-
- !ruby/object:Gem::Version
|
281
|
-
version: '0'
|
282
|
-
type: :development
|
283
|
-
prerelease: false
|
284
|
-
version_requirements: !ruby/object:Gem::Requirement
|
285
|
-
requirements:
|
286
|
-
- - ">="
|
287
|
-
- !ruby/object:Gem::Version
|
288
|
-
version: '0'
|
289
|
-
- !ruby/object:Gem::Dependency
|
290
|
-
name: stackprof
|
291
|
-
requirement: !ruby/object:Gem::Requirement
|
292
|
-
requirements:
|
293
|
-
- - ">="
|
294
|
-
- !ruby/object:Gem::Version
|
295
|
-
version: '0'
|
296
|
-
type: :development
|
297
|
-
prerelease: false
|
298
|
-
version_requirements: !ruby/object:Gem::Requirement
|
299
|
-
requirements:
|
300
|
-
- - ">="
|
301
|
-
- !ruby/object:Gem::Version
|
302
|
-
version: '0'
|
303
261
|
- !ruby/object:Gem::Dependency
|
304
262
|
name: rubocop
|
305
263
|
requirement: !ruby/object:Gem::Requirement
|
@@ -330,6 +288,7 @@ files:
|
|
330
288
|
- README.md
|
331
289
|
- Rakefile
|
332
290
|
- lib/rice_cooker.rb
|
291
|
+
- lib/rice_cooker/class_methods.rb
|
333
292
|
- lib/rice_cooker/filter.rb
|
334
293
|
- lib/rice_cooker/helpers.rb
|
335
294
|
- lib/rice_cooker/range.rb
|