iknow_params 2.2.3 → 2.2.4
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/iknow_params.gemspec +1 -0
- data/lib/iknow_params/serializer.rb +4 -0
- data/lib/iknow_params/serializer/array_of.rb +42 -0
- data/lib/iknow_params/serializer/hash_of.rb +44 -0
- data/lib/iknow_params/serializer/nullable.rb +35 -0
- data/lib/iknow_params/version.rb +1 -1
- data/spec/unit/serializer/array_of_spec.rb +32 -0
- data/spec/unit/serializer/hash_of_spec.rb +34 -0
- metadata +23 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e04e6c4dd0a375bed586bd4c0107dccfa2a1226fd42e16397cf7e8cbc74a5dc9
|
4
|
+
data.tar.gz: a1b11326a2487733f032f2a095ae1e15bf56e2254dc11eab6522710178109a29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7d883780b8b0ba7bf8175f99d79454451a0767d42c3eadc4965d31a8f73cc8cd6748d79d99411da10dcdeb686bb154e3294d4074a2a0ffbdaae84996e26bce8f
|
7
|
+
data.tar.gz: c478dacd778625d53f71f28bbd793d00b4558d9e327b52d3f0a77a4ae1b8f879c91bd3bdbdcdca77a0fea8cab188d495e12895d58f98128364c4e69f28cb5ab8
|
data/iknow_params.gemspec
CHANGED
@@ -83,6 +83,10 @@ class IknowParams::Serializer
|
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
|
+
require 'iknow_params/serializer/nullable'
|
87
|
+
require 'iknow_params/serializer/array_of'
|
88
|
+
require 'iknow_params/serializer/hash_of'
|
89
|
+
|
86
90
|
class String < IknowParams::Serializer
|
87
91
|
def initialize
|
88
92
|
super(::String)
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Serialize an array of application types to JSON types. Does not support fully
|
4
|
+
# rendering to/from a JSON string.
|
5
|
+
class IknowParams::Serializer::ArrayOf < IknowParams::Serializer
|
6
|
+
attr_reader :serializer, :allow_singleton
|
7
|
+
json_value!
|
8
|
+
|
9
|
+
def initialize(serializer, allow_singleton: false)
|
10
|
+
super(::Array)
|
11
|
+
@serializer = serializer
|
12
|
+
@allow_singleton = allow_singleton
|
13
|
+
end
|
14
|
+
|
15
|
+
def load(jvals)
|
16
|
+
if allow_singleton
|
17
|
+
jvals = Array.wrap(jvals)
|
18
|
+
else
|
19
|
+
unless jvals.is_a?(Array)
|
20
|
+
raise IknowParams::Serializer::LoadError.new(
|
21
|
+
"Incorrect type for ArrayOf: #{jvals.inspect}:#{jvals.class.name} is not an array")
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Special case thanks to Rails' array query param format not differentating
|
26
|
+
# empty arrays (i.e. `route?param[]=`). Since we can only express one of
|
27
|
+
# empty array and singleton array containing empty string, we pick the more
|
28
|
+
# useful former.
|
29
|
+
return [] if jvals == ['']
|
30
|
+
|
31
|
+
jvals.map { |jval| serializer.load(jval) }
|
32
|
+
end
|
33
|
+
|
34
|
+
def dump(vals, json: true)
|
35
|
+
matches_type!(vals)
|
36
|
+
vals.map { |val| serializer.dump(val, json: json) }
|
37
|
+
end
|
38
|
+
|
39
|
+
def matches_type?(vals)
|
40
|
+
super(vals) && vals.all? { |val| serializer.matches_type?(val) }
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Serialize a hash structure of application types to JSON types. Does not
|
4
|
+
# support fully rendering to/from a JSON string.
|
5
|
+
class IknowParams::Serializer::HashOf < IknowParams::Serializer
|
6
|
+
attr_reader :key_serializer, :value_serializer
|
7
|
+
json_value!
|
8
|
+
|
9
|
+
def initialize(key_serializer, value_serializer)
|
10
|
+
super(::Hash)
|
11
|
+
@key_serializer = key_serializer
|
12
|
+
@value_serializer = value_serializer
|
13
|
+
end
|
14
|
+
|
15
|
+
def load(jstructure)
|
16
|
+
jstructure = jstructure.to_unsafe_h if jstructure.is_a?(ActionController::Parameters)
|
17
|
+
|
18
|
+
unless jstructure.is_a?(Hash)
|
19
|
+
raise IknowParams::Serializer::LoadError.new(
|
20
|
+
"Incorrect type for HashOf: #{jstructure.inspect}:#{jstructure.class.name} is not a hash")
|
21
|
+
end
|
22
|
+
|
23
|
+
jstructure.each_with_object({}) do |(jkey, jvalue), result|
|
24
|
+
key = key_serializer.load(jkey)
|
25
|
+
value = value_serializer.load(jvalue)
|
26
|
+
result[key] = value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def dump(structure, json: true)
|
31
|
+
matches_type!(structure)
|
32
|
+
structure.each_with_object({}) do |(key, value), result|
|
33
|
+
jkey = key_serializer.dump(key, json: false)
|
34
|
+
jvalue = value_serializer.dump(value, json: json)
|
35
|
+
result[jkey] = jvalue
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def matches_type?(vals)
|
40
|
+
super(vals) && vals.all? do |k_val, v_val|
|
41
|
+
key_serializer.matches_type?(k_val) && value_serializer.matches_type?(v_val)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Serialize a potentially nil application type to JSON types. Does not support
|
4
|
+
# fully rendering to/from a string.
|
5
|
+
class IknowParams::Serializer::Nullable < IknowParams::Serializer
|
6
|
+
attr_reader :serializer
|
7
|
+
|
8
|
+
def load(val)
|
9
|
+
if val.nil?
|
10
|
+
nil
|
11
|
+
else
|
12
|
+
serializer.load(val)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def dump(val, json: false)
|
17
|
+
if val.nil?
|
18
|
+
nil
|
19
|
+
else
|
20
|
+
serializer.dump(val, json: json)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def matches_type?(val)
|
25
|
+
val.nil? || super
|
26
|
+
end
|
27
|
+
|
28
|
+
def json_value?
|
29
|
+
true
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(serializer)
|
33
|
+
@serializer = serializer
|
34
|
+
end
|
35
|
+
end
|
data/lib/iknow_params/version.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'iknow_params'
|
5
|
+
require 'rails'
|
6
|
+
|
7
|
+
RSpec.describe IknowParams::Serializer::ArrayOf do
|
8
|
+
let(:subject) { IknowParams::Serializer::ArrayOf.new(IknowParams::Serializer::Date) }
|
9
|
+
|
10
|
+
let(:serialized_dates) { ['2000-01-01', '2000-01-02'] }
|
11
|
+
let(:dates) { serialized_dates.map { |d| Date.parse(d) } }
|
12
|
+
|
13
|
+
describe '#load' do
|
14
|
+
it 'can load correct values' do
|
15
|
+
expect(subject.load(serialized_dates)).to eq(dates)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'raises load error on incorrect type' do
|
19
|
+
expect { subject.load(12) }.to raise_error(IknowParams::Serializer::LoadError)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '#dump' do
|
24
|
+
it 'can dump correct values' do
|
25
|
+
expect(subject.dump(dates)).to eq(serialized_dates)
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'raises dump error on incorrect type' do
|
29
|
+
expect { subject.dump(12) }.to raise_error(IknowParams::Serializer::DumpError)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require 'iknow_params'
|
5
|
+
require 'rails'
|
6
|
+
|
7
|
+
RSpec.describe IknowParams::Serializer::HashOf do
|
8
|
+
let(:subject) { IknowParams::Serializer::HashOf.new(IknowParams::Serializer::Integer, IknowParams::Serializer::Date) }
|
9
|
+
|
10
|
+
let(:serialized_dates) { { '1' => '2000-01-01', '2' => '2000-01-02' } }
|
11
|
+
let(:dates) do
|
12
|
+
{ 1 => Date.parse('2000-01-01'), 2 => Date.parse('2000-01-02') }
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#load' do
|
16
|
+
it 'can load correct values' do
|
17
|
+
expect(subject.load(serialized_dates)).to eq(dates)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'raises load error on incorrect type' do
|
21
|
+
expect { subject.load(12) }.to raise_error(IknowParams::Serializer::LoadError)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#dump' do
|
26
|
+
it 'can dump correct values' do
|
27
|
+
expect(subject.dump(dates)).to eq(serialized_dates)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'raises dump error on incorrect type' do
|
31
|
+
expect { subject.dump(12) }.to raise_error(IknowParams::Serializer::DumpError)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iknow_params
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dev@iknow.jp
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: tzinfo-data
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: activesupport
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -187,9 +201,14 @@ files:
|
|
187
201
|
- lib/iknow_params/parser.rb
|
188
202
|
- lib/iknow_params/parser/hash_parser.rb
|
189
203
|
- lib/iknow_params/serializer.rb
|
204
|
+
- lib/iknow_params/serializer/array_of.rb
|
205
|
+
- lib/iknow_params/serializer/hash_of.rb
|
206
|
+
- lib/iknow_params/serializer/nullable.rb
|
190
207
|
- lib/iknow_params/version.rb
|
191
208
|
- spec/spec_helper.rb
|
192
209
|
- spec/unit/parser_spec.rb
|
210
|
+
- spec/unit/serializer/array_of_spec.rb
|
211
|
+
- spec/unit/serializer/hash_of_spec.rb
|
193
212
|
- spec/unit/serializer_spec.rb
|
194
213
|
homepage: http://github.com/iknow/iknow_params
|
195
214
|
licenses:
|
@@ -217,4 +236,6 @@ summary: Rails parameter parser for iKnow.
|
|
217
236
|
test_files:
|
218
237
|
- spec/spec_helper.rb
|
219
238
|
- spec/unit/parser_spec.rb
|
239
|
+
- spec/unit/serializer/array_of_spec.rb
|
240
|
+
- spec/unit/serializer/hash_of_spec.rb
|
220
241
|
- spec/unit/serializer_spec.rb
|