getto-params 1.2.0 → 1.3.0

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
  SHA256:
3
- metadata.gz: 96670593db76cadfedc85a1ebf7bf846877335d77b7b69a8550540a416fa3f00
4
- data.tar.gz: b5af1711451a9b6baaa57ce6b4298a21898dce40bb2a0b3e6402438326e538d5
3
+ metadata.gz: 6040b7167c38d715e98f1556713c86d809e8fa61e10e10f17cabb92c6045b7ac
4
+ data.tar.gz: 4ef9fca6bcb60ad1eae3e72145871a226d962f7ffae1e0d37edd33af79430573
5
5
  SHA512:
6
- metadata.gz: 527145a9352cc46a05a4afee8d3c41615b038fc86b1a1418b5646cbe8f61365fb0febb5c804f7c0044d68fab4d250fc4924d82cc8053de1c199f1f65b7e212aa
7
- data.tar.gz: e80d7575cc2d6a79c4501af7e98b6c06412c0f4fa42a748b5e47cdf376ec19f989b9723edb1cc5ba436b2cb3773e7ca2eae7a557dec787c308ea78b8d19cd91e
6
+ metadata.gz: 0e291c389da36f6882acd05cac84b4ba9b35dc669f38e907527e9194d979ac65ebc9efae0513f14db6a9563a8112080d3b4b3d72c6681720a4187a0e8ad1a66f
7
+ data.tar.gz: daac1469c983748c45f87ca87597478260b53d146bb323d0966465989bb064eb94e434768c2967448b7d03040eb9b8634b421b4ed8ed867bd8da4126e841cc20
@@ -1 +1 @@
1
- 1.2.0
1
+ 1.3.0
@@ -1,3 +1,7 @@
1
+ # Version : 1.3.0
2
+
3
+ add: converter
4
+
1
5
  # Version : 1.2.0
2
6
 
3
7
  add: not_nil
@@ -0,0 +1,13 @@
1
+ # Version : 1.3.0
2
+
3
+ add: converter
4
+
5
+ ## commits
6
+
7
+ * fix: readme
8
+ * fix: readme
9
+ * fix: readme
10
+ * fix: readme
11
+ * fix: readme
12
+ * add: converter
13
+ * fix: readme
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- getto-params (1.2.0)
4
+ getto-params (1.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -17,6 +17,8 @@ Getto::Params.new.validate(params) do |v|
17
17
  "str1" => v.in(["param1","param2"]),
18
18
  "str2" => v.in(["param1","param2"]),
19
19
  "tel" => v.combine([v.string, v.match(%r{\A[0-9]+-[0-9]+-[0-9]+\Z})]),
20
+ "date" => v.combine([v.string, v.match_date]),
21
+ "data" => v.not_nil,
20
22
  "number" => v.match_integer,
21
23
  "bool" => v.match_bool,
22
24
  "hash" => v.hash(
@@ -42,6 +44,8 @@ end
42
44
  ```ruby
43
45
  require "getto/params/search"
44
46
 
47
+ time = Time # respond to `parse`
48
+
45
49
  Getto::Params::Search.new(
46
50
  page: 1,
47
51
  limit: 1000,
@@ -49,14 +53,28 @@ Getto::Params::Search.new(
49
53
  query: {
50
54
  "name.cont" => "search",
51
55
  "value.eq" => "value1",
56
+ "date.lteq" => "2018-10-01",
57
+ "time.gteq" => "2018-10-01",
58
+ "time.lteq" => "2018-10-01",
52
59
  },
53
60
  ).to_h do |search|
54
61
  search.sort do |s|
55
62
  s.straight :name
56
63
  end
64
+
65
+ search.convert do |c|
66
+ c.convert "date.lteq", &c.to_date
67
+ c.convert "time.gteq", &c.to_beginning_of_day(time)
68
+ c.convert "time.lteq", &c.to_end_of_day(time)
69
+ end
70
+
57
71
  search.query do |q|
58
72
  q.search "name.cont", &q.not_empty
59
- q.search("name.cont"){|val| ["value1","value2"].include? val }
73
+ q.search("value.eq"){|val| ["value1","value2"].include? val }
74
+
75
+ q.search "date.lteq", &q.not_nil
76
+ q.search "time.gteq", &q.not_nil
77
+ q.search "time.lteq", &q.not_nil
60
78
  end
61
79
  end
62
80
  # => {
@@ -69,6 +87,9 @@ end
69
87
  # query: {
70
88
  # "name.cont": "search",
71
89
  # "value.eq": "value1",
90
+ # "date.lteq": Date.parse("2018-10-01"),
91
+ # "time.gteq": Time.parse("2018-10-01 00:00:00"),
92
+ # "time.lteq": Time.parse("2018-10-01 23:59:59"),
72
93
  # },
73
94
  # }
74
95
  ```
@@ -126,6 +147,9 @@ Getto::Params.new.validate(params) do |v|
126
147
  # downcase should be equal to "true" or "false"
127
148
  "key" => v.match_bool,
128
149
 
150
+ # should match date
151
+ "key" => v.match_date,
152
+
129
153
 
130
154
  # should be hash includes :key that value is string
131
155
  "key" => v.hash(
@@ -152,6 +176,9 @@ Getto::Params.new.validate(params) do |v|
152
176
  # validate string and not_empty
153
177
  "key" => v.combine([v.string, v.not_empty]),
154
178
 
179
+ # validate not_nil
180
+ "key" => v.not_nil,
181
+
155
182
 
156
183
  # raise error if valudation failed
157
184
  "key" => v.string{|val| raise ArgumentError, "key should be string: #{val}" }
@@ -169,6 +196,8 @@ Format parameters for search api
169
196
  ```ruby
170
197
  require "getto/params/search"
171
198
 
199
+ time = Time # respond to `parse`
200
+
172
201
  Getto::Params::Search.new(
173
202
  page: 1,
174
203
  limit: 1000,
@@ -186,6 +215,12 @@ Getto::Params::Search.new(
186
215
  s.invert :name
187
216
  end
188
217
 
218
+ search.convert do |c|
219
+ c.convert "date.lteq", &c.to_date
220
+ c.convert "time.gteq", &c.to_beginning_of_day(time)
221
+ c.convert "time.lteq", &c.to_end_of_day(time)
222
+ end
223
+
189
224
  search.query do |q|
190
225
  # search "name.cont" if value not empty
191
226
  q.search "name.cont", &q.not_empty
@@ -257,6 +292,62 @@ end
257
292
  # }
258
293
  ```
259
294
 
295
+ #### convert query
296
+
297
+ - to date
298
+
299
+ ```ruby
300
+ search.convert do |c|
301
+ c.convert "date.lteq", &c.to_date
302
+ end
303
+
304
+ # query: { "date.lteq" => "invalid date" }
305
+ # => query: {
306
+ # "date.lteq" => nil,
307
+ # }
308
+
309
+ # query: { "date.lteq" => "2018-10-01" }
310
+ # => query: {
311
+ # "date.lteq" => Date.parse("2018-10-01"),
312
+ # }
313
+ ```
314
+
315
+ - to beginning of day, to end of day
316
+
317
+ ```ruby
318
+ time = Time # respond to `parse`
319
+
320
+ search.convert do |c|
321
+ c.convert "time.gteq", &c.to_beginning_of_day(time)
322
+ c.convert "time.lteq", &c.to_end_of_day(time)
323
+ end
324
+
325
+ # query: { "time.gteq" => "invalid date", "time.lteq" => "invalid date" }
326
+ # => query: {
327
+ # "time.gteq" => nil,
328
+ # "time.lteq" => nil,
329
+ # }
330
+
331
+ # query: { "time.gteq" => "2018-10-01", "time.lteq" => "2018-10-01" }
332
+ # => query: {
333
+ # "time.gteq" => Date.parse("2018-10-01 00:00:00"),
334
+ # "time.lteq" => Date.parse("2018-10-01 23:59:59"),
335
+ # }
336
+ ```
337
+
338
+ - convert by block
339
+
340
+ ```ruby
341
+ search.convert do |c|
342
+ c.convert("name.cont"){|search| search.upcase }
343
+ end
344
+
345
+ # query: { "name.cont" => "search" }
346
+ # => query: {
347
+ # "name.cont" => "SEARCH",
348
+ # }
349
+ ```
350
+
260
351
  #### search condition
261
352
 
262
353
  - not empty
@@ -276,6 +367,23 @@ end
276
367
  # }
277
368
  ```
278
369
 
370
+ - not nil
371
+
372
+ ```ruby
373
+ search.query do |q|
374
+ q.search "name.cont", &q.not_nil
375
+ end
376
+
377
+ # query: { "name.cont" => nil }
378
+ # => query: {
379
+ # }
380
+
381
+ # query: { "name.cont" => "search" }
382
+ # => query: {
383
+ # "name.cont": "search",
384
+ # }
385
+ ```
386
+
279
387
  - not all empty
280
388
 
281
389
  ```ruby
@@ -8,24 +8,28 @@ module Getto
8
8
  end
9
9
 
10
10
  def to_h
11
- @page.to_h.tap{|result|
12
- yield Worker.new(sort: @sort, query: @query, result: result)
13
- }
11
+ worker = Worker.new
12
+ yield worker
13
+
14
+ @page.to_h
15
+ .merge(sort: @sort.to_h(sort: worker.instance_variable_get(:@sort)))
16
+ .merge(query: @query.to_h(
17
+ convert: worker.instance_variable_get(:@convert),
18
+ check: worker.instance_variable_get(:@check),
19
+ ))
14
20
  end
15
21
 
16
22
  class Worker
17
- def initialize(sort:, query:, result:)
18
- @sort = sort
19
- @query = query
20
- @result = result
23
+ def sort(&block)
24
+ @sort = block
21
25
  end
22
26
 
23
- def sort(&block)
24
- @result.merge!(sort: @sort.to_h(&block))
27
+ def convert(&block)
28
+ @convert = block
25
29
  end
26
30
 
27
31
  def query(&block)
28
- @result.merge!(query: @query.to_h(&block))
32
+ @check = block
29
33
  end
30
34
  end
31
35
 
@@ -48,9 +52,11 @@ module Getto
48
52
  @sort = [sort.split(".")].to_h
49
53
  end
50
54
 
51
- def to_h
55
+ def to_h(sort:)
52
56
  spec = {}
53
- yield Order.new(spec)
57
+ if sort
58
+ sort.call Order.new(spec)
59
+ end
54
60
 
55
61
  result = {
56
62
  column: nil,
@@ -92,17 +98,73 @@ module Getto
92
98
  @query = query
93
99
  end
94
100
 
95
- def to_h
96
- spec = {}
97
- yield Checker.new(spec)
101
+ def to_h(convert:, check:)
102
+ converters = {}
103
+ if convert
104
+ convert.call Converter.new(converters)
105
+ end
98
106
 
99
- spec.map{|key,checker|
100
- if search = @query[key]
107
+ checkers = {}
108
+ if check
109
+ check.call Checker.new(checkers)
110
+ end
111
+
112
+ query = @query.map{|key,search|
113
+ if converter = converters[key.to_s]
114
+ [key.to_s, converter.call(search)]
115
+ else
116
+ [key.to_s, search]
117
+ end
118
+ }.to_h
119
+
120
+ checkers.map{|key,checker|
121
+ if search = query[key]
101
122
  if checker.call(search)
102
- [key.to_sym, search]
123
+ [key, search]
103
124
  end
104
125
  end
105
- }.compact.to_h
126
+ }.compact.to_h.transform_keys(&:to_sym)
127
+ end
128
+
129
+ class Converter
130
+ def initialize(columns)
131
+ @columns = columns
132
+ end
133
+
134
+ def convert(column,&converter)
135
+ @columns[column.to_s] = converter
136
+ end
137
+
138
+
139
+ def to_date
140
+ ->(search) {
141
+ begin
142
+ ::Date.parse(search)
143
+ rescue ArgumentError
144
+ nil
145
+ end
146
+ }
147
+ end
148
+
149
+ def to_beginning_of_day(time)
150
+ ->(search){
151
+ begin
152
+ time.parse(search).to_date.to_time
153
+ rescue ArgumentError
154
+ nil
155
+ end
156
+ }
157
+ end
158
+
159
+ def to_end_of_day(time)
160
+ ->(search){
161
+ begin
162
+ (time.parse(search).to_date + 1).to_time - 1
163
+ rescue ArgumentError
164
+ nil
165
+ end
166
+ }
167
+ end
106
168
  end
107
169
 
108
170
  class Checker
@@ -119,6 +181,10 @@ module Getto
119
181
  ->(search){ not search.empty? }
120
182
  end
121
183
 
184
+ def not_nil
185
+ ->(search){ not search.nil? }
186
+ end
187
+
122
188
  def not_all_empty
123
189
  ->(search){ not search.all?(&:empty?) }
124
190
  end
@@ -1,5 +1,5 @@
1
1
  module Getto
2
2
  class Params
3
- VERSION = "1.2.0"
3
+ VERSION = "1.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: getto-params
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shun@getto.systems
@@ -94,6 +94,7 @@ files:
94
94
  - CHANGELOG/1.1.1.md
95
95
  - CHANGELOG/1.1.2.md
96
96
  - CHANGELOG/1.2.0.md
97
+ - CHANGELOG/1.3.0.md
97
98
  - Gemfile
98
99
  - Gemfile.lock
99
100
  - LICENSE