sorted 2.0.0 → 2.0.1
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/README.md +1 -0
- data/lib/sorted.rb +43 -5
- data/lib/sorted/version.rb +1 -1
- data/spec/params_query_spec.rb +28 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2f0ad49531eb40c3d51bc2a4950f86b72ae83ea7
|
|
4
|
+
data.tar.gz: 2e51b786f0cd6517b6ad3ae2f0fe51a7eb77d257
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 0c1ac0dfd1f9364671961822558ab89f5363e8d5c39e6b3bdaf638eb2ad0d14dcd98205ebc7935650633e66955f582945fe08708d4085619bb9d7d775395b2bc
|
|
7
|
+
data.tar.gz: f74792f358763f1b61df176cf900b4581659f53fd838adf98c60c2b0606f426581e2db94311665d33ef2d9484d153295e97a225ced3d1f21bf507581e5a9a1d4
|
data/README.md
CHANGED
data/lib/sorted.rb
CHANGED
|
@@ -142,18 +142,22 @@ module Sorted
|
|
|
142
142
|
return Set.new if raw.nil?
|
|
143
143
|
raw.to_s.split(delim).inject(Set.new, &block)
|
|
144
144
|
end
|
|
145
|
+
|
|
146
|
+
def parse_match(m)
|
|
147
|
+
[(m[2].nil? ? m[1] : m[2]), (m[3].nil? ? 'asc' : m[3].downcase)]
|
|
148
|
+
end
|
|
145
149
|
end
|
|
146
150
|
|
|
147
151
|
class URIQuery
|
|
148
152
|
extend Parse
|
|
149
153
|
|
|
150
|
-
REGEXP = /([a-
|
|
154
|
+
REGEXP = /(([a-z0-9._]+)_([asc|desc]+)|[a-z0-9._]+)/i
|
|
151
155
|
|
|
152
156
|
def self.parse(raw)
|
|
153
157
|
split(raw, /!/) do |set, part|
|
|
154
158
|
m = part.match(REGEXP)
|
|
155
|
-
|
|
156
|
-
set <<
|
|
159
|
+
next unless m
|
|
160
|
+
set << parse_match(m)
|
|
157
161
|
end
|
|
158
162
|
end
|
|
159
163
|
|
|
@@ -170,8 +174,8 @@ module Sorted
|
|
|
170
174
|
def self.parse(raw)
|
|
171
175
|
split(raw, /,/) do |set, part|
|
|
172
176
|
m = part.match(REGEXP)
|
|
173
|
-
|
|
174
|
-
set <<
|
|
177
|
+
next unless m
|
|
178
|
+
set << parse_match(m)
|
|
175
179
|
end
|
|
176
180
|
end
|
|
177
181
|
|
|
@@ -199,4 +203,38 @@ module Sorted
|
|
|
199
203
|
set.inject({}) { |a, e| a.merge(Hash[e[0], SORTED_TO_JSON[e[1]]]) }
|
|
200
204
|
end
|
|
201
205
|
end
|
|
206
|
+
|
|
207
|
+
##
|
|
208
|
+
# Parses an array of decoded query params
|
|
209
|
+
#
|
|
210
|
+
# This parser/encoder uses an already decoded array of sort strings parsed by
|
|
211
|
+
# a URI library.
|
|
212
|
+
#
|
|
213
|
+
# Parsing:
|
|
214
|
+
#
|
|
215
|
+
# params = ['phone_desc', 'name_asc']
|
|
216
|
+
# set = Sorted::ParamsQuery.parse(params)
|
|
217
|
+
# set.to_a #=> [['phone', 'desc'], ['name', asc']]
|
|
218
|
+
#
|
|
219
|
+
# Encoding:
|
|
220
|
+
#
|
|
221
|
+
# Sorted::ParamsQuery.encode(set) #=> ['phone_desc', 'name_asc']
|
|
222
|
+
|
|
223
|
+
class ParamsQuery
|
|
224
|
+
extend Parse
|
|
225
|
+
|
|
226
|
+
REGEXP = /(([a-z0-9._]+)_([asc|desc]+)|[a-z0-9._]+)/i
|
|
227
|
+
|
|
228
|
+
def self.parse(params)
|
|
229
|
+
params.inject(Set.new) do |set, part|
|
|
230
|
+
m = part.match(REGEXP)
|
|
231
|
+
next unless m
|
|
232
|
+
set << parse_match(m)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def self.encode(set)
|
|
237
|
+
set.map { |a| a.join('_') }
|
|
238
|
+
end
|
|
239
|
+
end
|
|
202
240
|
end
|
data/lib/sorted/version.rb
CHANGED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Sorted::ParamsQuery, 'decode' do
|
|
4
|
+
it 'should return a set from an array of params' do
|
|
5
|
+
params = %w(email_asc phone_asc name_desc)
|
|
6
|
+
set = Sorted::ParamsQuery.parse(params)
|
|
7
|
+
result = Sorted::Set.new([['email', 'asc'], ['phone', 'asc'], ['name', 'desc']])
|
|
8
|
+
|
|
9
|
+
expect(set).to eq(result)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
it 'should defalut to asc if missing direction' do
|
|
13
|
+
params = %w(email)
|
|
14
|
+
set = Sorted::ParamsQuery.parse(params)
|
|
15
|
+
result = Sorted::Set.new([['email', 'asc']])
|
|
16
|
+
|
|
17
|
+
expect(set).to eq(result)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe Sorted::ParamsQuery, 'encode' do
|
|
22
|
+
it 'should return an array of params to be used with a URL library' do
|
|
23
|
+
set = Sorted::Set.new([['email', 'desc'], ['name', 'desc'], ['phone', 'asc']])
|
|
24
|
+
result = %w(email_desc name_desc phone_asc)
|
|
25
|
+
|
|
26
|
+
expect(Sorted::ParamsQuery.encode(set)).to eq(result)
|
|
27
|
+
end
|
|
28
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sorted
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Rufus Post
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-02-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
@@ -86,6 +86,7 @@ files:
|
|
|
86
86
|
- lib/sorted/version.rb
|
|
87
87
|
- sorted.gemspec
|
|
88
88
|
- spec/json_query_spec.rb
|
|
89
|
+
- spec/params_query_spec.rb
|
|
89
90
|
- spec/set_spec.rb
|
|
90
91
|
- spec/spec_helper.rb
|
|
91
92
|
- spec/sql_query_spec.rb
|