iknow_params 2.2.3 → 2.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b89e48380562cd7aa3238e08fbbeb1f947b336eebc3a47582de1ac648da582d0
4
- data.tar.gz: 0d899f1d4a4ce279a9fe50d651769a29c542f9cdd4c7753f8cf9c512b7f47047
3
+ metadata.gz: c54aa3dbf703f1f04fa03e590544353685c0f06164145cba052834c1d55c0930
4
+ data.tar.gz: 6ab10b40f1b8bec45460c00d2bf3a8a5f78d79cc7a4cae4186625f8386c9aeca
5
5
  SHA512:
6
- metadata.gz: c94310c197e1cb3537be0cbd22768e0d557402a11b40c7c692cfc7966d247bfd7455624d54e0f46a41bb049d12db2798c6cb7070a41f168285a10528d5d2d57a
7
- data.tar.gz: 5df5a8a5ebc3cddcb6509faa6ed446ad23265daa5be55f65e1f959f92b554de9388f2ccda020c8dfa226f359b0fa3a39fc16e8453c59be76440e1865b1ab7a12
6
+ metadata.gz: a0b4538a9449e86583e8fa478759c432e66d0157da607a742201205d211121f02c85a93fcc9cdddb887af0257570488c821d814fb4d339968221307a116a5942
7
+ data.tar.gz: fc3d1702617b6694a3849fa4fe707475c9fc672a51e659372307d2175b2b69f481f88fa45e2902e756f3f4da0a02e9229bf14908295924a149fcb77e447eaa01
data/.circleci/config.yml CHANGED
@@ -10,7 +10,7 @@ executors:
10
10
  type: string
11
11
  default: "Gemfile"
12
12
  docker:
13
- - image: circleci/ruby:<< parameters.ruby-version >>
13
+ - image: cimg/ruby:<< parameters.ruby-version >>
14
14
  environment:
15
15
  BUNDLE_JOBS: 3
16
16
  BUNDLE_RETRY: 3
@@ -92,9 +92,13 @@ workflows:
92
92
  ruby-version: "2.6"
93
93
  gemfile: gemfiles/activesupport_5_2.gemfile
94
94
  - test:
95
- name: 'ruby 2.6 ActiveSupport 6.0'
96
- ruby-version: "2.6"
95
+ name: 'ruby 2.7 ActiveSupport 6.0'
96
+ ruby-version: "2.7"
97
97
  gemfile: gemfiles/activesupport_6_0.gemfile
98
+ - test:
99
+ name: 'ruby 3.1 ActiveSupport 7.0'
100
+ ruby-version: "3.1"
101
+ gemfile: gemfiles/activesupport_7_0.gemfile
98
102
  - publish:
99
103
  filters:
100
104
  branches:
data/Appraisals CHANGED
@@ -1,7 +1,14 @@
1
- appraise "activesupport-5-2" do
2
- gem "activesupport", "~> 5.2.0"
1
+ appraise 'activesupport-5-2' do
2
+ gem 'activesupport', '~> 5.2.0'
3
+ gem 'rails', '~> 5.2.0'
3
4
  end
4
5
 
5
- appraise 'activesupport-6-0 do
6
- gem 'activesupport', '~> 6.0.0"
6
+ appraise 'activesupport-6-0' do
7
+ gem 'activesupport', '~> 6.0.0'
8
+ gem 'rails', '~> 6.0.0'
9
+ end
10
+
11
+ appraise 'activesupport-7-0' do
12
+ gem 'activesupport', '~> 7.0.0'
13
+ gem 'rails', '~> 7.0.0'
7
14
  end
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "rspec_junit_formatter"
6
6
  gem "activesupport", "~> 5.2.0"
7
+ gem "rails", "~> 5.2.0"
7
8
 
8
9
  gemspec path: "../"
@@ -4,5 +4,6 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "rspec_junit_formatter"
6
6
  gem "activesupport", "~> 6.0.0"
7
+ gem "rails", "~> 6.0.0"
7
8
 
8
9
  gemspec path: "../"
@@ -0,0 +1,9 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "rspec_junit_formatter"
6
+ gem "activesupport", "~> 7.0.0"
7
+ gem "rails", "~> 7.0.0"
8
+
9
+ gemspec path: "../"
data/iknow_params.gemspec CHANGED
@@ -13,22 +13,26 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "http://github.com/iknow/iknow_params"
14
14
  spec.license = "MIT"
15
15
 
16
+ spec.required_ruby_version = ">= 2.5"
17
+ spec.required_rubygems_version = ">= 2.5"
18
+
16
19
  spec.files = `git ls-files -z`.split("\x0")
17
20
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
21
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
22
  spec.require_paths = ["lib"]
20
23
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "bundler", "~> 2.0"
25
+ spec.add_development_dependency "rake", "~> 12.0"
23
26
  spec.add_development_dependency "rspec", "~> 3.0"
24
27
  spec.add_development_dependency "sqlite3"
25
- spec.add_development_dependency "actionpack", "> 5.0"
26
- spec.add_development_dependency "rails", "> 5.0"
28
+ spec.add_development_dependency "actionpack", "> 5.2.0"
29
+ spec.add_development_dependency "rails", "> 5.2.0"
27
30
 
28
31
  spec.add_development_dependency "byebug"
29
32
  spec.add_development_dependency "appraisal"
33
+ spec.add_development_dependency "tzinfo-data"
30
34
 
31
- spec.add_dependency "activesupport", "> 5.0"
35
+ spec.add_dependency "activesupport", "> 5.2.0"
32
36
  spec.add_dependency "tzinfo"
33
- spec.add_dependency "json-schema", "~> 2.8.0"
37
+ spec.add_dependency "json-schema", "~> 3.0.0"
34
38
  end
@@ -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
@@ -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)
@@ -173,6 +177,8 @@ class IknowParams::Serializer
173
177
  # Abstract serializer for ISO8601 dates and times
174
178
  class ISO8601 < IknowParams::Serializer
175
179
  def load(str)
180
+ raise TypeError.new unless str.is_a?(::String)
181
+
176
182
  clazz.parse(str)
177
183
  rescue TypeError, ArgumentError => _e
178
184
  raise LoadError.new("Invalid type for conversion to #{clazz}")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module IknowParams
4
- VERSION = '2.2.3'
4
+ VERSION = '2.3.0'
5
5
  end
@@ -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
@@ -4,6 +4,7 @@ require 'spec_helper'
4
4
  require 'iknow_params'
5
5
 
6
6
  require 'rails'
7
+ require 'active_support/core_ext'
7
8
  require 'action_controller'
8
9
 
9
10
  RSpec.describe IknowParams::Serializer do
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.3
4
+ version: 2.3.0
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-02-26 00:00:00.000000000 Z
11
+ date: 2022-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '2.0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '12.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '12.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - ">"
74
74
  - !ruby/object:Gem::Version
75
- version: '5.0'
75
+ version: 5.2.0
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ">"
81
81
  - !ruby/object:Gem::Version
82
- version: '5.0'
82
+ version: 5.2.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rails
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - ">"
88
88
  - !ruby/object:Gem::Version
89
- version: '5.0'
89
+ version: 5.2.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">"
95
95
  - !ruby/object:Gem::Version
96
- version: '5.0'
96
+ version: 5.2.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: byebug
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -122,20 +122,34 @@ 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
128
142
  requirements:
129
143
  - - ">"
130
144
  - !ruby/object:Gem::Version
131
- version: '5.0'
145
+ version: 5.2.0
132
146
  type: :runtime
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - ">"
137
151
  - !ruby/object:Gem::Version
138
- version: '5.0'
152
+ version: 5.2.0
139
153
  - !ruby/object:Gem::Dependency
140
154
  name: tzinfo
141
155
  requirement: !ruby/object:Gem::Requirement
@@ -156,14 +170,14 @@ dependencies:
156
170
  requirements:
157
171
  - - "~>"
158
172
  - !ruby/object:Gem::Version
159
- version: 2.8.0
173
+ version: 3.0.0
160
174
  type: :runtime
161
175
  prerelease: false
162
176
  version_requirements: !ruby/object:Gem::Requirement
163
177
  requirements:
164
178
  - - "~>"
165
179
  - !ruby/object:Gem::Version
166
- version: 2.8.0
180
+ version: 3.0.0
167
181
  description: ''
168
182
  email:
169
183
  - ''
@@ -174,7 +188,6 @@ files:
174
188
  - ".circleci/config.yml"
175
189
  - ".gitignore"
176
190
  - ".rspec"
177
- - ".travis.yml"
178
191
  - Appraisals
179
192
  - Gemfile
180
193
  - LICENSE.txt
@@ -182,14 +195,20 @@ files:
182
195
  - Rakefile
183
196
  - gemfiles/activesupport_5_2.gemfile
184
197
  - gemfiles/activesupport_6_0.gemfile
198
+ - gemfiles/activesupport_7_0.gemfile
185
199
  - iknow_params.gemspec
186
200
  - lib/iknow_params.rb
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:
@@ -203,18 +222,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
203
222
  requirements:
204
223
  - - ">="
205
224
  - !ruby/object:Gem::Version
206
- version: '0'
225
+ version: '2.5'
207
226
  required_rubygems_version: !ruby/object:Gem::Requirement
208
227
  requirements:
209
228
  - - ">="
210
229
  - !ruby/object:Gem::Version
211
- version: '0'
230
+ version: '2.5'
212
231
  requirements: []
213
- rubygems_version: 3.0.3
232
+ rubygems_version: 3.3.11
214
233
  signing_key:
215
234
  specification_version: 4
216
235
  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
data/.travis.yml DELETED
@@ -1,8 +0,0 @@
1
- dist: trusty
2
- language: ruby
3
- rvm:
4
- - 2.4
5
- gemfile:
6
- - gemfiles/activesupport_5_2.gemfile
7
- notifications:
8
- email: false