might 0.6.0 → 0.7.0
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/.gitignore +1 -0
- data/.travis.yml +10 -12
- data/Appraisals +27 -0
- data/CHANGELOG.md +10 -0
- data/README.md +10 -0
- data/gemfiles/rails_4.2.7_ransack_1.6.6.gemfile +10 -0
- data/gemfiles/rails_4.2.7_ransack_1.8.2.gemfile +10 -0
- data/gemfiles/rails_5.0.0_ransack_1.6.6.gemfile +10 -0
- data/gemfiles/rails_5.0.0_ransack_1.8.2.gemfile +10 -0
- data/lib/might/filter_parameter_definition.rb +1 -1
- data/lib/might/filter_parameters.rb +53 -3
- data/lib/might/filter_parameters_extractor.rb +1 -1
- data/lib/might/filter_predicates.rb +15 -15
- data/lib/might/pagination_middleware.rb +1 -1
- data/lib/might/ransackable_filter_parameters_adapter.rb +3 -3
- data/lib/might/result.rb +4 -1
- data/lib/might/sort_parameter.rb +1 -1
- data/lib/might/sort_parameter_definition.rb +1 -1
- data/lib/might/version.rb +1 -1
- data/might.gemspec +8 -7
- metadata +42 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a99e1e236e472a2f44627590833f038129a24b8b
|
4
|
+
data.tar.gz: 4d73b4d2dc3a555a946a3335baa5eb125b1efe13
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9725439777f374fe441cee6b05bdfd69fd836fb18a8776141eab222c99c28c128658de13e83aaa174cc8f5d6c9b1284b0bfe433818ded81c47d974f9ad63513f
|
7
|
+
data.tar.gz: 86ff8d294343e2917804b38c1551a364245d6eba9784eed5e63f52863dc9c8a60e30e8254281da17d52c34bac6da6e83094ec3c25d7c47ab1c37b34c98053541
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
|
1
|
+
---
|
2
2
|
language: ruby
|
3
3
|
rvm:
|
4
|
-
|
5
|
-
|
6
|
-
- 2.2.3
|
7
|
-
- ruby-head
|
8
|
-
matrix:
|
9
|
-
allow_failures:
|
10
|
-
- rvm: ruby-head
|
11
|
-
fast_finish: true
|
12
|
-
before_install: gem install bundler -v 1.10.6
|
4
|
+
- 2.2.5
|
5
|
+
- 2.3.1
|
13
6
|
script:
|
14
|
-
|
15
|
-
|
7
|
+
- bundle exec rake spec
|
8
|
+
- bundle exec rubocop --fail-level C
|
9
|
+
gemfile:
|
10
|
+
- gemfiles/rails_4.2.7_ransack_1.6.6.gemfile
|
11
|
+
- gemfiles/rails_4.2.7_ransack_1.8.2.gemfile
|
12
|
+
- gemfiles/rails_5.0.0_ransack_1.6.6.gemfile
|
13
|
+
- gemfiles/rails_5.0.0_ransack_1.8.2.gemfile
|
data/Appraisals
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
ruby_versions = %w(2.2.5 2.3.1)
|
4
|
+
rails_versions = %w(4.2.7 5.0.0)
|
5
|
+
ransack_versions = %w(1.6.6 1.8.2)
|
6
|
+
|
7
|
+
rails_versions.product(ransack_versions).each do |(rails, ransack)|
|
8
|
+
appraise "rails_#{rails}_ransack_#{ransack}" do
|
9
|
+
gem 'activerecord', rails
|
10
|
+
gem 'activesupport', rails
|
11
|
+
gem 'ransack', ransack
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
::File.open('.travis.yml', 'w+') do |f|
|
16
|
+
travis_hash = {
|
17
|
+
'language' => 'ruby',
|
18
|
+
'rvm' => ruby_versions,
|
19
|
+
'script' => [
|
20
|
+
'bundle exec rake spec',
|
21
|
+
'bundle exec rubocop --fail-level C'
|
22
|
+
],
|
23
|
+
'gemfile' => Dir.glob('gemfiles/*.gemfile')
|
24
|
+
}
|
25
|
+
travis = ::YAML.dump(travis_hash)
|
26
|
+
f.write travis
|
27
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
**0.7.0**
|
2
|
+
|
3
|
+
* Allow to pass block to `FilterParameter#fetch` to customize not found behaviour.
|
4
|
+
* Implement `FilterParameter#delete`.
|
5
|
+
* `FilterParameters` is not derived from `Set` anymore.
|
6
|
+
|
7
|
+
**0.6.1**
|
8
|
+
|
9
|
+
* Add error message to `Failure#get`
|
10
|
+
|
1
11
|
**0.6.0**
|
2
12
|
|
3
13
|
* Implement public API for registering predicates
|
data/README.md
CHANGED
@@ -303,6 +303,16 @@ new version, update the version number in `version.rb`, and then run `bundle exe
|
|
303
303
|
which will create a git tag for the version, push git commits and tags, and push the `.gem`
|
304
304
|
file to [rubygems.org](https://rubygems.org).
|
305
305
|
|
306
|
+
|
307
|
+
We test `Might` against different versions of `ActiveRecord` and `Ransack` using [appraisal](https://github.com/thoughtbot/appraisal) gem.
|
308
|
+
To regenerate gemfiles run:
|
309
|
+
|
310
|
+
$ appraisal install
|
311
|
+
|
312
|
+
To run specs against all versions:
|
313
|
+
|
314
|
+
$ appraisal rake spec
|
315
|
+
|
306
316
|
## License
|
307
317
|
|
308
318
|
Copyright 2015 SPB TV AG
|
@@ -1,33 +1,83 @@
|
|
1
1
|
require 'set'
|
2
|
+
require 'forwardable'
|
2
3
|
|
3
4
|
module Might
|
4
5
|
#
|
5
|
-
class FilterParameters
|
6
|
+
class FilterParameters
|
7
|
+
include Comparable
|
8
|
+
include Enumerable
|
9
|
+
extend Forwardable
|
10
|
+
|
6
11
|
FilterError = Class.new(KeyError)
|
7
12
|
|
13
|
+
def_delegators :parameters, :detect, :each
|
14
|
+
|
15
|
+
# @param [<Might::FilterParameter>]
|
16
|
+
def initialize(parameters = nil)
|
17
|
+
@parameters = Set.new(parameters)
|
18
|
+
end
|
19
|
+
|
8
20
|
# Find filter by name
|
9
21
|
# @param name [String]
|
10
22
|
# @return [Might::FilterParameter, nil]
|
11
23
|
#
|
12
24
|
def [](name)
|
13
|
-
detect { |filter| filter.name == name }
|
25
|
+
parameters.detect { |filter| filter.name == name }
|
14
26
|
end
|
15
27
|
|
16
28
|
# Find filter by name or raise error
|
17
29
|
# @param name [String]
|
30
|
+
# @yieldparam name [String]
|
31
|
+
# block value will be returned if no `FilterParameter` found with specified name
|
18
32
|
# @return [Might::FilterParameter]
|
19
33
|
# @raise FilterError
|
20
34
|
#
|
21
35
|
def fetch(name)
|
22
36
|
if (filter = self[name])
|
23
37
|
filter
|
38
|
+
elsif block_given?
|
39
|
+
yield(name)
|
24
40
|
else
|
25
41
|
fail FilterError, "filter not found: #{name.inspect}"
|
26
42
|
end
|
27
43
|
end
|
28
44
|
|
45
|
+
# param value [Might::FilterParameter]
|
46
|
+
def add(value)
|
47
|
+
self.class.new(parameters.add(value))
|
48
|
+
end
|
49
|
+
|
50
|
+
alias << add
|
51
|
+
|
29
52
|
def map(&block)
|
30
|
-
|
53
|
+
self.class.new(parameters.map(&block))
|
31
54
|
end
|
55
|
+
|
56
|
+
# param other [Might::FilterParameters]
|
57
|
+
def -(other)
|
58
|
+
self.class.new(parameters - other.parameters)
|
59
|
+
end
|
60
|
+
|
61
|
+
# param other [Might::FilterParameters]
|
62
|
+
def +(other)
|
63
|
+
self.class.new(parameters.merge(other.parameters))
|
64
|
+
end
|
65
|
+
|
66
|
+
# Delete filter by name
|
67
|
+
# @param name [String]
|
68
|
+
# @return [Might::FilterParameter, nil]
|
69
|
+
def delete(name)
|
70
|
+
filter_parameter = self[name]
|
71
|
+
parameters.delete(filter_parameter) if filter_parameter
|
72
|
+
filter_parameter
|
73
|
+
end
|
74
|
+
|
75
|
+
def <=>(other)
|
76
|
+
parameters <=> other.parameters
|
77
|
+
end
|
78
|
+
|
79
|
+
protected
|
80
|
+
|
81
|
+
attr_reader :parameters
|
32
82
|
end
|
33
83
|
end
|
@@ -34,22 +34,22 @@ module Might
|
|
34
34
|
CONT_ANY = 'cont_any'.freeze
|
35
35
|
|
36
36
|
@predicates_on_value = Set.new([
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
37
|
+
NOT_EQ, EQ,
|
38
|
+
DOES_NOT_MATCH, MATCHES,
|
39
|
+
GT, LT,
|
40
|
+
GTEQ, LTEQ,
|
41
|
+
NOT_CONT, CONT,
|
42
|
+
NOT_START, START,
|
43
|
+
DOES_NOT_END, ENDS,
|
44
|
+
NOT_TRUE, TRUE,
|
45
|
+
NOT_FALSE, FALSE,
|
46
|
+
BLANK, PRESENT,
|
47
|
+
NOT_NULL, NULL
|
48
|
+
])
|
49
49
|
@predicates_on_array = Set.new([
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
NOT_IN, IN,
|
51
|
+
NOT_CONT_ANY, CONT_ANY
|
52
|
+
])
|
53
53
|
|
54
54
|
# Registers predicate on singular value or on array
|
55
55
|
# @param predicate [String, Symbol]
|
@@ -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
|
|
@@ -52,8 +52,8 @@ module Might
|
|
52
52
|
polymorphic_name = filter.on.keys.first
|
53
53
|
|
54
54
|
name = Array(filter.on.values.first)
|
55
|
-
|
56
|
-
|
55
|
+
.map { |polymorphic_type| "#{polymorphic_name}_of_#{polymorphic_type}_type_#{filter.name}" }
|
56
|
+
.join('_or_')
|
57
57
|
|
58
58
|
"#{name}_#{filter.predicate}"
|
59
59
|
end
|
data/lib/might/result.rb
CHANGED
@@ -27,7 +27,10 @@ module Might
|
|
27
27
|
|
28
28
|
# @raise [NotImplementedError]
|
29
29
|
def get
|
30
|
-
fail NotImplementedError
|
30
|
+
fail NotImplementedError, <<-MESSAGE.strip_heredoc
|
31
|
+
#{self.class} does not respond to #get. You should explicitly check for
|
32
|
+
#success? before calling #get.
|
33
|
+
MESSAGE
|
31
34
|
end
|
32
35
|
|
33
36
|
# @yield given block
|
data/lib/might/sort_parameter.rb
CHANGED
data/lib/might/version.rb
CHANGED
data/might.gemspec
CHANGED
@@ -23,11 +23,12 @@ Gem::Specification.new do |spec|
|
|
23
23
|
spec.add_runtime_dependency 'activemodel', '>= 3.2'
|
24
24
|
spec.add_runtime_dependency 'uber', '~> 0.0.15'
|
25
25
|
spec.add_runtime_dependency 'ibsciss-middleware', '~> 0.3'
|
26
|
-
spec.add_runtime_dependency 'ransack', '
|
27
|
-
spec.add_development_dependency 'activerecord', '>= 3.2'
|
28
|
-
spec.add_development_dependency 'sqlite3', '~> 1.3'
|
29
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
30
|
-
spec.add_development_dependency 'rake', '~>
|
31
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
32
|
-
spec.add_development_dependency 'spbtv_code_style', '
|
26
|
+
spec.add_runtime_dependency 'ransack', '>= 1.6.6'
|
27
|
+
spec.add_development_dependency 'activerecord', '>= 3.2', '< 6.0.0'
|
28
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3.11'
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.12.5'
|
30
|
+
spec.add_development_dependency 'rake', '~> 11.2.2'
|
31
|
+
spec.add_development_dependency 'rspec', '~> 3.5.0'
|
32
|
+
spec.add_development_dependency 'spbtv_code_style', '1.4.1'
|
33
|
+
spec.add_development_dependency 'appraisal', '2.1.0'
|
33
34
|
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.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tema Bolshakov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -70,14 +70,14 @@ dependencies:
|
|
70
70
|
name: ransack
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 1.6.6
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 1.6.6
|
83
83
|
- !ruby/object:Gem::Dependency
|
@@ -87,6 +87,9 @@ dependencies:
|
|
87
87
|
- - ">="
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '3.2'
|
90
|
+
- - "<"
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 6.0.0
|
90
93
|
type: :development
|
91
94
|
prerelease: false
|
92
95
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -94,76 +97,93 @@ dependencies:
|
|
94
97
|
- - ">="
|
95
98
|
- !ruby/object:Gem::Version
|
96
99
|
version: '3.2'
|
100
|
+
- - "<"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 6.0.0
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
104
|
name: sqlite3
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
100
106
|
requirements:
|
101
107
|
- - "~>"
|
102
108
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
109
|
+
version: 1.3.11
|
104
110
|
type: :development
|
105
111
|
prerelease: false
|
106
112
|
version_requirements: !ruby/object:Gem::Requirement
|
107
113
|
requirements:
|
108
114
|
- - "~>"
|
109
115
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
116
|
+
version: 1.3.11
|
111
117
|
- !ruby/object:Gem::Dependency
|
112
118
|
name: bundler
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
121
|
- - "~>"
|
116
122
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
123
|
+
version: 1.12.5
|
118
124
|
type: :development
|
119
125
|
prerelease: false
|
120
126
|
version_requirements: !ruby/object:Gem::Requirement
|
121
127
|
requirements:
|
122
128
|
- - "~>"
|
123
129
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
130
|
+
version: 1.12.5
|
125
131
|
- !ruby/object:Gem::Dependency
|
126
132
|
name: rake
|
127
133
|
requirement: !ruby/object:Gem::Requirement
|
128
134
|
requirements:
|
129
135
|
- - "~>"
|
130
136
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
137
|
+
version: 11.2.2
|
132
138
|
type: :development
|
133
139
|
prerelease: false
|
134
140
|
version_requirements: !ruby/object:Gem::Requirement
|
135
141
|
requirements:
|
136
142
|
- - "~>"
|
137
143
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
144
|
+
version: 11.2.2
|
139
145
|
- !ruby/object:Gem::Dependency
|
140
146
|
name: rspec
|
141
147
|
requirement: !ruby/object:Gem::Requirement
|
142
148
|
requirements:
|
143
149
|
- - "~>"
|
144
150
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
151
|
+
version: 3.5.0
|
146
152
|
type: :development
|
147
153
|
prerelease: false
|
148
154
|
version_requirements: !ruby/object:Gem::Requirement
|
149
155
|
requirements:
|
150
156
|
- - "~>"
|
151
157
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
158
|
+
version: 3.5.0
|
153
159
|
- !ruby/object:Gem::Dependency
|
154
160
|
name: spbtv_code_style
|
155
161
|
requirement: !ruby/object:Gem::Requirement
|
156
162
|
requirements:
|
157
|
-
- -
|
163
|
+
- - '='
|
158
164
|
- !ruby/object:Gem::Version
|
159
|
-
version: 1.
|
165
|
+
version: 1.4.1
|
160
166
|
type: :development
|
161
167
|
prerelease: false
|
162
168
|
version_requirements: !ruby/object:Gem::Requirement
|
163
169
|
requirements:
|
164
|
-
- -
|
170
|
+
- - '='
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 1.4.1
|
173
|
+
- !ruby/object:Gem::Dependency
|
174
|
+
name: appraisal
|
175
|
+
requirement: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - '='
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 2.1.0
|
180
|
+
type: :development
|
181
|
+
prerelease: false
|
182
|
+
version_requirements: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - '='
|
165
185
|
- !ruby/object:Gem::Version
|
166
|
-
version: 1.
|
186
|
+
version: 2.1.0
|
167
187
|
description: Mighty resource fetchers build on top of Ransack gem
|
168
188
|
email:
|
169
189
|
- abolshakov@spbtv.com
|
@@ -176,6 +196,7 @@ files:
|
|
176
196
|
- ".rspec"
|
177
197
|
- ".rubocop.yml"
|
178
198
|
- ".travis.yml"
|
199
|
+
- Appraisals
|
179
200
|
- CHANGELOG.md
|
180
201
|
- Gemfile
|
181
202
|
- LICENSE
|
@@ -184,6 +205,10 @@ files:
|
|
184
205
|
- bin/console
|
185
206
|
- bin/setup
|
186
207
|
- config/locales/en.yml
|
208
|
+
- gemfiles/rails_4.2.7_ransack_1.6.6.gemfile
|
209
|
+
- gemfiles/rails_4.2.7_ransack_1.8.2.gemfile
|
210
|
+
- gemfiles/rails_5.0.0_ransack_1.6.6.gemfile
|
211
|
+
- gemfiles/rails_5.0.0_ransack_1.8.2.gemfile
|
187
212
|
- lib/might.rb
|
188
213
|
- lib/might/fetcher.rb
|
189
214
|
- lib/might/fetcher_error.rb
|
@@ -234,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
234
259
|
version: '0'
|
235
260
|
requirements: []
|
236
261
|
rubyforge_project:
|
237
|
-
rubygems_version: 2.
|
262
|
+
rubygems_version: 2.5.1
|
238
263
|
signing_key:
|
239
264
|
specification_version: 4
|
240
265
|
summary: Mighty resource fetchers
|