might 0.5.1 → 0.5.2
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/.rubocop.yml +2 -0
- data/.travis.yml +1 -0
- data/lib/might/fetcher.rb +33 -23
- data/lib/might/filter_parameter_definition.rb +1 -1
- data/lib/might/filter_predicates.rb +28 -28
- data/lib/might/filter_value_validator.rb +2 -2
- data/lib/might/ransackable_filter_parameters_adapter.rb +1 -1
- data/lib/might/sort_parameter_definition.rb +2 -2
- data/lib/might/sort_value_validator.rb +1 -1
- data/lib/might/version.rb +1 -1
- data/might.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16724ee40371d468bd5a932a35a100ae39bff05b
|
4
|
+
data.tar.gz: 1211d23fcfb3043dc2da35000d0c500da5b5c2bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1f218d738eab33a02c2b62072fe1cb23cce557ccca6752386892877d41c33f96cabcd35b50161d6d6894b12ae8cd950ea7277a4e362b35ddf8a90f1b8e38684a
|
7
|
+
data.tar.gz: eae9d9eb274fc4a539db1457e2f990adcedc73c1d4b2c8aa649c5345bb2e266653a17bb7e2cb91baae3b0406f52356e0ded177d44baa069dc793aec3ad0d529e
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
data/lib/might/fetcher.rb
CHANGED
@@ -51,7 +51,7 @@ module Might
|
|
51
51
|
#
|
52
52
|
# sort :position, as: :relevance, reverse_direction: true
|
53
53
|
#
|
54
|
-
class Fetcher
|
54
|
+
class Fetcher # rubocop:disable Metrics/ClassLength
|
55
55
|
extend Uber::InheritableAttr
|
56
56
|
|
57
57
|
inheritable_attr :resource_class
|
@@ -71,7 +71,7 @@ module Might
|
|
71
71
|
@params = params
|
72
72
|
end
|
73
73
|
|
74
|
-
# @return [
|
74
|
+
# @return [Might::Result] filtered and sorted collection
|
75
75
|
# @yieldparam collection [Result] if a block given
|
76
76
|
#
|
77
77
|
# @example
|
@@ -91,8 +91,7 @@ module Might
|
|
91
91
|
result = if errors.any?
|
92
92
|
Failure.new(errors)
|
93
93
|
else
|
94
|
-
|
95
|
-
Success.new(processed_collection)
|
94
|
+
Success.new(fetch(processed_params))
|
96
95
|
end
|
97
96
|
|
98
97
|
if block_given?
|
@@ -104,14 +103,38 @@ module Might
|
|
104
103
|
|
105
104
|
private
|
106
105
|
|
106
|
+
# @param parsed_params [Hash]
|
107
107
|
# @return [ActiveRecord::Relation]
|
108
|
-
|
109
|
-
|
108
|
+
# @api public
|
109
|
+
# This method may be overridden to implement integration with library other than Ransack
|
110
|
+
#
|
111
|
+
def fetch(parsed_params)
|
112
|
+
collection, = middleware.call([self.class.resource_class, parsed_params])
|
113
|
+
collection
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [Hash, Array] tuple of parameters and processing errors
|
117
|
+
# this errors may be shown to front-end developer
|
118
|
+
# @api public
|
119
|
+
def process_params(params)
|
120
|
+
process_params_middleware.call([params, []])
|
121
|
+
end
|
122
|
+
|
123
|
+
# Library params processing middleware stack
|
124
|
+
# @return [Middleware::Builder]
|
125
|
+
def process_params_middleware
|
126
|
+
Middleware::Builder.new do |b|
|
127
|
+
b.use FilterParametersExtractor, self.class.filter_parameters_definition
|
128
|
+
b.use FilterParametersValidator
|
129
|
+
b.use SortParametersExtractor, self.class.sort_parameters_definition
|
130
|
+
b.use SortParametersValidator
|
131
|
+
b.use PaginationParametersValidator
|
132
|
+
end
|
110
133
|
end
|
111
134
|
|
112
135
|
# Library middleware stack
|
113
136
|
# @return [Middleware::Builder]
|
114
|
-
def
|
137
|
+
def fetch_middleware
|
115
138
|
Middleware::Builder.new do |b|
|
116
139
|
b.use FilterMiddleware
|
117
140
|
b.use SortMiddleware
|
@@ -122,25 +145,13 @@ module Might
|
|
122
145
|
# User modified middleware stack
|
123
146
|
# @return [Middleware::Builder]
|
124
147
|
def middleware
|
125
|
-
|
148
|
+
fetch_middleware.tap do |builder|
|
126
149
|
self.class.middleware_changes.each do |change|
|
127
150
|
builder.instance_eval(&change)
|
128
151
|
end
|
129
152
|
end
|
130
153
|
end
|
131
154
|
|
132
|
-
# @return [Hash, Array] tuple of parameters and processing errors
|
133
|
-
# this errors may be shown to front-end developer
|
134
|
-
def process_params(params)
|
135
|
-
Middleware::Builder.new do |b|
|
136
|
-
b.use FilterParametersExtractor, self.class.filter_parameters_definition
|
137
|
-
b.use FilterParametersValidator
|
138
|
-
b.use SortParametersExtractor, self.class.sort_parameters_definition
|
139
|
-
b.use SortParametersValidator
|
140
|
-
b.use PaginationParametersValidator
|
141
|
-
end.call([params, []])
|
142
|
-
end
|
143
|
-
|
144
155
|
class << self
|
145
156
|
# Alter middleware chain with the given block
|
146
157
|
# @param [Proc] change
|
@@ -235,12 +246,11 @@ module Might
|
|
235
246
|
|
236
247
|
private
|
237
248
|
|
238
|
-
def alter_middleware(method_name, *args
|
249
|
+
def alter_middleware(method_name, *args)
|
239
250
|
fail ArgumentError unless block_given?
|
240
251
|
middleware_changes.push lambda { |builder|
|
241
252
|
builder.send method_name, *args, lambda { |env|
|
242
|
-
|
243
|
-
block.call(scope, params).tap do |r|
|
253
|
+
yield(*env).tap do |r|
|
244
254
|
if !r.is_a?(Array) || r.size != 2
|
245
255
|
fail 'After block must return tuple of scope and params'
|
246
256
|
end
|
@@ -2,32 +2,32 @@ module Might
|
|
2
2
|
# Contains contains with all supported predicates
|
3
3
|
#
|
4
4
|
module FilterPredicates
|
5
|
-
NOT_EQ = 'not_eq'
|
6
|
-
EQ = 'eq'
|
7
|
-
DOES_NOT_MATCH = 'does_not_match'
|
8
|
-
MATCHES = 'matches'
|
9
|
-
GT = 'gt'
|
10
|
-
LT = 'lt'
|
11
|
-
GTEQ = 'gteq'
|
12
|
-
LTEQ = 'lteq'
|
13
|
-
NOT_CONT = 'not_cont'
|
14
|
-
CONT = 'cont'
|
15
|
-
NOT_START = 'not_start'
|
16
|
-
START = 'start'
|
17
|
-
DOES_NOT_END = 'not_end'
|
18
|
-
ENDS = 'end'
|
19
|
-
NOT_TRUE = 'not_true'
|
20
|
-
TRUE = 'true'
|
21
|
-
NOT_FALSE = 'not_false'
|
22
|
-
FALSE = 'false'
|
23
|
-
BLANK = 'blank'
|
24
|
-
PRESENT = 'present'
|
25
|
-
NOT_NULL = 'not_null'
|
26
|
-
NULL = 'null'
|
27
|
-
NOT_IN = 'not_in'
|
28
|
-
IN = 'in'
|
29
|
-
NOT_CONT_ANY = 'not_cont_any'
|
30
|
-
CONT_ANY = 'cont_any'
|
5
|
+
NOT_EQ = 'not_eq'.freeze
|
6
|
+
EQ = 'eq'.freeze
|
7
|
+
DOES_NOT_MATCH = 'does_not_match'.freeze
|
8
|
+
MATCHES = 'matches'.freeze
|
9
|
+
GT = 'gt'.freeze
|
10
|
+
LT = 'lt'.freeze
|
11
|
+
GTEQ = 'gteq'.freeze
|
12
|
+
LTEQ = 'lteq'.freeze
|
13
|
+
NOT_CONT = 'not_cont'.freeze
|
14
|
+
CONT = 'cont'.freeze
|
15
|
+
NOT_START = 'not_start'.freeze
|
16
|
+
START = 'start'.freeze
|
17
|
+
DOES_NOT_END = 'not_end'.freeze
|
18
|
+
ENDS = 'end'.freeze
|
19
|
+
NOT_TRUE = 'not_true'.freeze
|
20
|
+
TRUE = 'true'.freeze
|
21
|
+
NOT_FALSE = 'not_false'.freeze
|
22
|
+
FALSE = 'false'.freeze
|
23
|
+
BLANK = 'blank'.freeze
|
24
|
+
PRESENT = 'present'.freeze
|
25
|
+
NOT_NULL = 'not_null'.freeze
|
26
|
+
NULL = 'null'.freeze
|
27
|
+
NOT_IN = 'not_in'.freeze
|
28
|
+
IN = 'in'.freeze
|
29
|
+
NOT_CONT_ANY = 'not_cont_any'.freeze
|
30
|
+
CONT_ANY = 'cont_any'.freeze
|
31
31
|
|
32
32
|
ON_VALUE = [
|
33
33
|
NOT_EQ, EQ,
|
@@ -41,12 +41,12 @@ module Might
|
|
41
41
|
NOT_FALSE, FALSE,
|
42
42
|
BLANK, PRESENT,
|
43
43
|
NOT_NULL, NULL
|
44
|
-
]
|
44
|
+
].freeze
|
45
45
|
|
46
46
|
ON_ARRAY = [
|
47
47
|
NOT_IN, IN,
|
48
48
|
NOT_CONT_ANY, CONT_ANY
|
49
|
-
]
|
49
|
+
].freeze
|
50
50
|
|
51
51
|
ALL = ON_VALUE + ON_ARRAY
|
52
52
|
end
|
@@ -30,11 +30,11 @@ module Might
|
|
30
30
|
include ActiveModel::Validations
|
31
31
|
|
32
32
|
validates(definition.as, definition.validations) if definition.validations.present?
|
33
|
-
validates(definition.as, 'might/filter_value_validator/defined'
|
33
|
+
validates(definition.as, :'might/filter_value_validator/defined' => true)
|
34
34
|
|
35
35
|
define_method(:undefined?) { definition.undefined? }
|
36
36
|
|
37
|
-
|
37
|
+
define_singleton_method :model_name do
|
38
38
|
ActiveModel::Name.new(Might, nil, 'Might')
|
39
39
|
end
|
40
40
|
end
|
@@ -10,7 +10,7 @@ module Might
|
|
10
10
|
scope, params = env
|
11
11
|
|
12
12
|
ransackable_parameters = Array(params[:filter]).reject { |f| f.predicate.nil? }
|
13
|
-
|
13
|
+
.each_with_object({}) do |filter, ransackable_filters|
|
14
14
|
ransackable_filters[canonical_name_for(filter)] = filter.value
|
15
15
|
end
|
16
16
|
|
@@ -37,7 +37,7 @@ module Might
|
|
37
37
|
other.as == as
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
alias reverse_direction? reverse_direction
|
41
41
|
|
42
42
|
def validator
|
43
43
|
SortValueValidator.build(self).new
|
@@ -48,7 +48,7 @@ module Might
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def undefined?
|
51
|
-
!self.defined?
|
51
|
+
!self.defined? # rubocop:disable Style/RedundantSelf
|
52
52
|
end
|
53
53
|
end
|
54
54
|
end
|
@@ -29,7 +29,7 @@ module Might
|
|
29
29
|
Class.new do
|
30
30
|
include ActiveModel::Validations
|
31
31
|
|
32
|
-
validates(definition.name, 'might/sort_value_validator/defined'
|
32
|
+
validates(definition.name, :'might/sort_value_validator/defined' => true)
|
33
33
|
|
34
34
|
define_method(:undefined?) { definition.undefined? }
|
35
35
|
define_method(definition.name) {}
|
data/lib/might/version.rb
CHANGED
data/might.gemspec
CHANGED
@@ -29,5 +29,5 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency 'bundler', '~> 1.10'
|
30
30
|
spec.add_development_dependency 'rake', '~> 10.0'
|
31
31
|
spec.add_development_dependency 'rspec', '~> 3.3'
|
32
|
-
spec.add_development_dependency 'spbtv_code_style'
|
32
|
+
spec.add_development_dependency 'spbtv_code_style', '~> 1.2.3'
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: might
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tema Bolshakov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -154,16 +154,16 @@ dependencies:
|
|
154
154
|
name: spbtv_code_style
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
156
156
|
requirements:
|
157
|
-
- - "
|
157
|
+
- - "~>"
|
158
158
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
159
|
+
version: 1.2.3
|
160
160
|
type: :development
|
161
161
|
prerelease: false
|
162
162
|
version_requirements: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- - "
|
164
|
+
- - "~>"
|
165
165
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
166
|
+
version: 1.2.3
|
167
167
|
description: Mighty resource fetchers build on top of Ransack gem
|
168
168
|
email:
|
169
169
|
- abolshakov@spbtv.com
|