paramore 1.1.0 → 2.0.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/README.md +14 -14
- data/lib/paramore/errors.rb +2 -2
- data/lib/paramore/extension.rb +1 -1
- data/lib/paramore/field_schema.rb +36 -0
- data/lib/paramore/permitted_parameter_argument.rb +1 -1
- data/lib/paramore/validate.rb +4 -4
- data/lib/paramore.rb +8 -1
- metadata +4 -4
- data/lib/paratype.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bc18680611ecf9983143593443a9d04e3a7b57ac77111f183960287600a9592
|
4
|
+
data.tar.gz: 613b869bddc6de6a585e8de9f0448373a40da62d4daecf736e19e0955fa477ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: efb59cc8e0ee2d9bb324f8d543ff7e5e22a652d4bc23b5ea067b5fdadb3d47cd85ea228d5d855e47a43980f2723b8dc7983d11f592c44404607c00967b522788
|
7
|
+
data.tar.gz: aba0613b0838fd1b1d523bfe62913e33f1b4be678891c0794db7af2aa3138cd9755ff3c8c9b501e13203ccb49c94cd6d04e303d43bb7df4951279cdc22ff7c44
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Paramore
|
2
2
|
|
3
|
-
Paramore
|
4
|
-
|
3
|
+
Paramore allows you to declare a typed schema for your params,
|
4
|
+
so that any downstream code can work with the data it expects.
|
5
5
|
|
6
6
|
# Installation
|
7
7
|
|
@@ -20,7 +20,7 @@ $ bundle
|
|
20
20
|
<h3>Without typing</h3>
|
21
21
|
|
22
22
|
```ruby
|
23
|
-
|
23
|
+
param_schema :item_params,
|
24
24
|
item: [:name, :description, :for_sale, :price, metadata: [tags: []]]
|
25
25
|
```
|
26
26
|
|
@@ -74,15 +74,15 @@ class ItemsController < ApplicationController
|
|
74
74
|
Item.create(item_params)
|
75
75
|
end
|
76
76
|
|
77
|
-
|
77
|
+
param_schema :item_params,
|
78
78
|
item: {
|
79
|
-
name:
|
80
|
-
description:
|
81
|
-
for_sale:
|
82
|
-
price:
|
83
|
-
metadata:
|
84
|
-
tags:
|
85
|
-
}
|
79
|
+
name: Paramore.field(Paramore::SanitizedString),
|
80
|
+
description: Paramore.field(Paramore::StrippedString, null: true),
|
81
|
+
for_sale: Paramore.field(Paramore::Boolean),
|
82
|
+
price: Paramore.field(Paramore::Decimal),
|
83
|
+
metadata: Paramore.field({
|
84
|
+
tags: Paramore.field([Types::ItemTag], compact: true)
|
85
|
+
})
|
86
86
|
}
|
87
87
|
end
|
88
88
|
```
|
@@ -129,13 +129,13 @@ Notice that the `Paramore::StrippedString` does not perform `.squeeze(' ')`, onl
|
|
129
129
|
<h3>nil</h3>
|
130
130
|
|
131
131
|
Types are non-nullable by default and raise exceptions if the param hash misses any.
|
132
|
-
This can be disabled for any type by declaring `
|
132
|
+
This can be disabled for any type by declaring `Paramore.field(Paramore::Int, null: true)`.
|
133
133
|
|
134
134
|
nils will usually not reach any of the type classes - if some parameter is nullable, the class will not be called.
|
135
135
|
If a parameter is non-nullable, then a `Paramore::NilParameter` error will be raised before calling the class.
|
136
136
|
If a, say, `item_ids` array is non-nullable, but the received parameter is `['1', '', '3']`, only the `'1'` and `'2'` will get passed to type classes, and the resulting array will contain a nil, eg.: `['1', nil, '3']`.
|
137
|
-
nils inside arrays can still be passed to type classes by declaring `
|
138
|
-
If you wish to get rid of empty array elements, declare `
|
137
|
+
nils inside arrays can still be passed to type classes by declaring `Paramore.field([Paramore::Int], empty: true)`.
|
138
|
+
If you wish to get rid of empty array elements, declare `Paramore.field(Paramore::Int, compact: true)`.
|
139
139
|
|
140
140
|
<h3>Configuration</h3>
|
141
141
|
|
data/lib/paramore/errors.rb
CHANGED
@@ -4,8 +4,8 @@ class Paramore::NilParameter < StandardError
|
|
4
4
|
end
|
5
5
|
end
|
6
6
|
|
7
|
-
class Paramore::
|
7
|
+
class Paramore::NonFieldSchema < StandardError
|
8
8
|
def initialize(param_name, type)
|
9
|
-
super("`#{param_name}` defined as a `#{type.class}`, expected `
|
9
|
+
super("`#{param_name}` defined as a `#{type.class}`, expected a call of `Paramore.field()`! Perhaps you declared a plain hash instead of Paramore.field({})?")
|
10
10
|
end
|
11
11
|
end
|
data/lib/paramore/extension.rb
CHANGED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Paramore
|
2
|
+
class FieldSchema
|
3
|
+
DEFAULT_OPTIONS = {
|
4
|
+
null: false,
|
5
|
+
empty: false,
|
6
|
+
compact: false,
|
7
|
+
}.freeze
|
8
|
+
|
9
|
+
def initialize(given_type, null:, empty:, compact:)
|
10
|
+
@given_type = given_type
|
11
|
+
@nullable = null
|
12
|
+
@empty = empty
|
13
|
+
@compact = compact
|
14
|
+
end
|
15
|
+
|
16
|
+
def compact?
|
17
|
+
compact
|
18
|
+
end
|
19
|
+
|
20
|
+
def nullable?
|
21
|
+
nullable
|
22
|
+
end
|
23
|
+
|
24
|
+
def use_empty_strings?
|
25
|
+
empty
|
26
|
+
end
|
27
|
+
|
28
|
+
def type
|
29
|
+
given_type
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
attr_reader :given_type, :nullable, :empty, :compact
|
35
|
+
end
|
36
|
+
end
|
data/lib/paramore/validate.rb
CHANGED
@@ -13,12 +13,12 @@ module Paramore
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def types(types_definition)
|
16
|
-
types_definition.flat_map do |param_name,
|
17
|
-
unless
|
18
|
-
raise Paramore::
|
16
|
+
types_definition.flat_map do |param_name, field_schema|
|
17
|
+
unless field_schema.is_a?(Paramore::FieldSchema)
|
18
|
+
raise Paramore::NonFieldSchema.new(param_name, field_schema)
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
field_schema.type.is_a?(Hash) ? types(field_schema.type) : field_schema.type
|
22
22
|
end.uniq
|
23
23
|
end
|
24
24
|
end
|
data/lib/paramore.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require_relative 'paramore/configuration'
|
2
2
|
require_relative 'paramore/railtie'
|
3
3
|
require_relative 'paramore/types'
|
4
|
-
require_relative '
|
4
|
+
require_relative 'paramore/field_schema'
|
5
5
|
|
6
6
|
module Paramore
|
7
7
|
class << self
|
@@ -15,4 +15,11 @@ module Paramore
|
|
15
15
|
def self.configure
|
16
16
|
yield(configuration)
|
17
17
|
end
|
18
|
+
|
19
|
+
def self.field(given_type, options = {})
|
20
|
+
Paramore::FieldSchema.new(
|
21
|
+
given_type,
|
22
|
+
**Paramore::FieldSchema::DEFAULT_OPTIONS.merge(options)
|
23
|
+
)
|
24
|
+
end
|
18
25
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paramore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lukas Kairevičius
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-08-
|
11
|
+
date: 2021-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec-rails
|
@@ -91,17 +91,17 @@ files:
|
|
91
91
|
- lib/paramore/configuration.rb
|
92
92
|
- lib/paramore/errors.rb
|
93
93
|
- lib/paramore/extension.rb
|
94
|
+
- lib/paramore/field_schema.rb
|
94
95
|
- lib/paramore/permitted_parameter_argument.rb
|
95
96
|
- lib/paramore/railtie.rb
|
96
97
|
- lib/paramore/types.rb
|
97
98
|
- lib/paramore/validate.rb
|
98
|
-
- lib/paratype.rb
|
99
99
|
homepage: https://github.com/lumzdas/paramore
|
100
100
|
licenses:
|
101
101
|
- MIT
|
102
102
|
metadata: {}
|
103
103
|
post_install_message: |
|
104
|
-
Thank you for installing Paramore
|
104
|
+
Thank you for installing Paramore 2.0.0 !
|
105
105
|
From the command line you can run `paramore` to generate a configuration file
|
106
106
|
|
107
107
|
More details here : https://github.com/lumzdas/paramore/blob/master/README.md
|
data/lib/paratype.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
class Paratype
|
2
|
-
def self.[](given_type, null: false, empty: false, compact: false)
|
3
|
-
self.new(given_type, null: null, empty: empty, compact: compact)
|
4
|
-
end
|
5
|
-
|
6
|
-
def initialize(given_type, null:, empty:, compact:)
|
7
|
-
@given_type = given_type
|
8
|
-
@nullable = null
|
9
|
-
@empty = empty
|
10
|
-
@compact = compact
|
11
|
-
end
|
12
|
-
|
13
|
-
def compact?
|
14
|
-
compact
|
15
|
-
end
|
16
|
-
|
17
|
-
def nullable?
|
18
|
-
nullable
|
19
|
-
end
|
20
|
-
|
21
|
-
def use_empty_strings?
|
22
|
-
empty
|
23
|
-
end
|
24
|
-
|
25
|
-
def type
|
26
|
-
given_type
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
attr_reader :given_type, :nullable, :empty, :compact
|
32
|
-
end
|