easy_params 0.2.1 → 0.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 +4 -4
- data/.github/workflows/ruby.yml +50 -0
- data/.gitignore +0 -0
- data/.rspec +0 -0
- data/.rubocop.yml +188 -0
- data/.travis.yml +0 -0
- data/CODE_OF_CONDUCT.md +0 -0
- data/Gemfile +9 -3
- data/Gemfile.lock +40 -9
- data/LICENSE.txt +0 -0
- data/README.md +13 -1
- data/Rakefile +9 -3
- data/bin/console +4 -3
- data/easy_params.gemspec +6 -8
- data/lib/easy_params/base.rb +36 -14
- data/lib/easy_params/dsl.rb +9 -0
- data/lib/easy_params/types.rb +2 -0
- data/lib/easy_params/version.rb +3 -1
- data/lib/easy_params.rb +2 -0
- metadata +9 -49
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d5a19f19d20a42ef6a6ba3e606298c3dbf696a22c9dcdc9e42a8ffe48e1e67db
|
|
4
|
+
data.tar.gz: fce70967d59989d5e650289483d5437f4ebb80793d49b3a446d252796017117c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3f690f1a17df11da94e8f707c99f97854aec48ca890320c0345159286c4e10ac19448a5b3a6557936c6076b4bf4e886cd51841ef394b3a205c91626a680b598f
|
|
7
|
+
data.tar.gz: c43521492ce73961d7ff7fb562ba7b8ba944f03c928a8c68298f8f6f168c21ab698d4acdf3fe2dd073296bec99418cf14adffd8446cc751541b32136b452e972
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
|
2
|
+
# They are provided by a third-party and are governed by
|
|
3
|
+
# separate terms of service, privacy policy, and support
|
|
4
|
+
# documentation.
|
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
|
7
|
+
|
|
8
|
+
name: Ruby
|
|
9
|
+
|
|
10
|
+
on:
|
|
11
|
+
push:
|
|
12
|
+
branches: [ "master" ]
|
|
13
|
+
pull_request:
|
|
14
|
+
branches: [ "master" ]
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
test:
|
|
21
|
+
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
strategy:
|
|
24
|
+
matrix:
|
|
25
|
+
ruby-version: ['2.7', '3.0']
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v3
|
|
29
|
+
- name: Set up Ruby
|
|
30
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
31
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
32
|
+
# uses: ruby/setup-ruby@v1
|
|
33
|
+
uses: ruby/setup-ruby@55283cc23133118229fd3f97f9336ee23a179fcf # v1.146.0
|
|
34
|
+
with:
|
|
35
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
36
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
37
|
+
- name: Setup Code Climate test-reporter
|
|
38
|
+
run: |
|
|
39
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
|
40
|
+
chmod +x ./cc-test-reporter
|
|
41
|
+
./cc-test-reporter before-build
|
|
42
|
+
- name: Run the default task
|
|
43
|
+
env:
|
|
44
|
+
CC_TEST_REPORTER_ID: 3484f4290e34aa523ef280da3743fd5dc86a443fd7d8a1e5ba2339d1f63308d8
|
|
45
|
+
run: bundle exec rake
|
|
46
|
+
- name: Publish code coverage
|
|
47
|
+
run: |
|
|
48
|
+
export GIT_BRANCH="master"
|
|
49
|
+
./cc-test-reporter after-build -d -t simplecov -r 3484f4290e34aa523ef280da3743fd5dc86a443fd7d8a1e5ba2339d1f63308d8
|
|
50
|
+
|
data/.gitignore
CHANGED
|
File without changes
|
data/.rspec
CHANGED
|
File without changes
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.6
|
|
3
|
+
NewCops: enable
|
|
4
|
+
Exclude:
|
|
5
|
+
- ./spec/spec_helper.rb
|
|
6
|
+
- ./spec/**/*.rb
|
|
7
|
+
- vendor/bundle/**/*
|
|
8
|
+
|
|
9
|
+
Layout/LineLength:
|
|
10
|
+
Max: 120
|
|
11
|
+
|
|
12
|
+
Metrics/BlockLength:
|
|
13
|
+
Exclude:
|
|
14
|
+
- ./spec/**/*.rb
|
|
15
|
+
- ./easy_params.gemspec
|
|
16
|
+
|
|
17
|
+
Gemspec/DeprecatedAttributeAssignment: # new in 1.30
|
|
18
|
+
Enabled: true
|
|
19
|
+
Gemspec/DevelopmentDependencies: # new in 1.44
|
|
20
|
+
Enabled: true
|
|
21
|
+
Gemspec/RequireMFA: # new in 1.23
|
|
22
|
+
Enabled: false
|
|
23
|
+
Layout/LineContinuationLeadingSpace: # new in 1.31
|
|
24
|
+
Enabled: true
|
|
25
|
+
Layout/LineContinuationSpacing: # new in 1.31
|
|
26
|
+
Enabled: true
|
|
27
|
+
Layout/LineEndStringConcatenationIndentation: # new in 1.18
|
|
28
|
+
Enabled: true
|
|
29
|
+
Layout/SpaceBeforeBrackets: # new in 1.7
|
|
30
|
+
Enabled: true
|
|
31
|
+
Lint/AmbiguousAssignment: # new in 1.7
|
|
32
|
+
Enabled: true
|
|
33
|
+
Lint/AmbiguousOperatorPrecedence: # new in 1.21
|
|
34
|
+
Enabled: true
|
|
35
|
+
Lint/AmbiguousRange: # new in 1.19
|
|
36
|
+
Enabled: true
|
|
37
|
+
Lint/ConstantOverwrittenInRescue: # new in 1.31
|
|
38
|
+
Enabled: true
|
|
39
|
+
Lint/DeprecatedConstants: # new in 1.8
|
|
40
|
+
Enabled: true
|
|
41
|
+
Lint/DuplicateBranch: # new in 1.3
|
|
42
|
+
Enabled: true
|
|
43
|
+
Lint/DuplicateMagicComment: # new in 1.37
|
|
44
|
+
Enabled: true
|
|
45
|
+
Lint/DuplicateMatchPattern: # new in 1.50
|
|
46
|
+
Enabled: true
|
|
47
|
+
Lint/DuplicateRegexpCharacterClassElement: # new in 1.1
|
|
48
|
+
Enabled: true
|
|
49
|
+
Lint/EmptyBlock: # new in 1.1
|
|
50
|
+
Enabled: true
|
|
51
|
+
Lint/EmptyClass: # new in 1.3
|
|
52
|
+
Enabled: true
|
|
53
|
+
Lint/EmptyInPattern: # new in 1.16
|
|
54
|
+
Enabled: true
|
|
55
|
+
Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
|
|
56
|
+
Enabled: true
|
|
57
|
+
Lint/LambdaWithoutLiteralBlock: # new in 1.8
|
|
58
|
+
Enabled: true
|
|
59
|
+
Lint/NoReturnInBeginEndBlocks: # new in 1.2
|
|
60
|
+
Enabled: true
|
|
61
|
+
Lint/NonAtomicFileOperation: # new in 1.31
|
|
62
|
+
Enabled: true
|
|
63
|
+
Lint/NumberedParameterAssignment: # new in 1.9
|
|
64
|
+
Enabled: true
|
|
65
|
+
Lint/OrAssignmentToConstant: # new in 1.9
|
|
66
|
+
Enabled: true
|
|
67
|
+
Lint/RedundantDirGlobSort: # new in 1.8
|
|
68
|
+
Enabled: true
|
|
69
|
+
Lint/RefinementImportMethods: # new in 1.27
|
|
70
|
+
Enabled: true
|
|
71
|
+
Lint/RequireRangeParentheses: # new in 1.32
|
|
72
|
+
Enabled: true
|
|
73
|
+
Lint/RequireRelativeSelfPath: # new in 1.22
|
|
74
|
+
Enabled: true
|
|
75
|
+
Lint/SymbolConversion: # new in 1.9
|
|
76
|
+
Enabled: true
|
|
77
|
+
Lint/ToEnumArguments: # new in 1.1
|
|
78
|
+
Enabled: true
|
|
79
|
+
Lint/TripleQuotes: # new in 1.9
|
|
80
|
+
Enabled: true
|
|
81
|
+
Lint/UnexpectedBlockArity: # new in 1.5
|
|
82
|
+
Enabled: true
|
|
83
|
+
Lint/UnmodifiedReduceAccumulator: # new in 1.1
|
|
84
|
+
Enabled: true
|
|
85
|
+
Lint/UselessRescue: # new in 1.43
|
|
86
|
+
Enabled: true
|
|
87
|
+
Lint/UselessRuby2Keywords: # new in 1.23
|
|
88
|
+
Enabled: true
|
|
89
|
+
Metrics/CollectionLiteralLength: # new in 1.47
|
|
90
|
+
Enabled: true
|
|
91
|
+
Naming/BlockForwarding: # new in 1.24
|
|
92
|
+
Enabled: true
|
|
93
|
+
Security/CompoundHash: # new in 1.28
|
|
94
|
+
Enabled: true
|
|
95
|
+
Security/IoMethods: # new in 1.22
|
|
96
|
+
Enabled: true
|
|
97
|
+
Style/ArgumentsForwarding: # new in 1.1
|
|
98
|
+
Enabled: true
|
|
99
|
+
Style/ArrayIntersect: # new in 1.40
|
|
100
|
+
Enabled: true
|
|
101
|
+
Style/CollectionCompact: # new in 1.2
|
|
102
|
+
Enabled: true
|
|
103
|
+
Style/ComparableClamp: # new in 1.44
|
|
104
|
+
Enabled: true
|
|
105
|
+
Style/ConcatArrayLiterals: # new in 1.41
|
|
106
|
+
Enabled: true
|
|
107
|
+
Style/DataInheritance: # new in 1.49
|
|
108
|
+
Enabled: true
|
|
109
|
+
Style/DirEmpty: # new in 1.48
|
|
110
|
+
Enabled: true
|
|
111
|
+
Style/DocumentDynamicEvalDefinition: # new in 1.1
|
|
112
|
+
Enabled: true
|
|
113
|
+
Style/EmptyHeredoc: # new in 1.32
|
|
114
|
+
Enabled: true
|
|
115
|
+
Style/EndlessMethod: # new in 1.8
|
|
116
|
+
Enabled: true
|
|
117
|
+
Style/EnvHome: # new in 1.29
|
|
118
|
+
Enabled: true
|
|
119
|
+
Style/FetchEnvVar: # new in 1.28
|
|
120
|
+
Enabled: true
|
|
121
|
+
Style/FileEmpty: # new in 1.48
|
|
122
|
+
Enabled: true
|
|
123
|
+
Style/FileRead: # new in 1.24
|
|
124
|
+
Enabled: true
|
|
125
|
+
Style/FileWrite: # new in 1.24
|
|
126
|
+
Enabled: true
|
|
127
|
+
Style/HashConversion: # new in 1.10
|
|
128
|
+
Enabled: true
|
|
129
|
+
Style/HashExcept: # new in 1.7
|
|
130
|
+
Enabled: true
|
|
131
|
+
Style/IfWithBooleanLiteralBranches: # new in 1.9
|
|
132
|
+
Enabled: true
|
|
133
|
+
Style/InPatternThen: # new in 1.16
|
|
134
|
+
Enabled: true
|
|
135
|
+
Style/MagicCommentFormat: # new in 1.35
|
|
136
|
+
Enabled: true
|
|
137
|
+
Style/MapCompactWithConditionalBlock: # new in 1.30
|
|
138
|
+
Enabled: true
|
|
139
|
+
Style/MapToHash: # new in 1.24
|
|
140
|
+
Enabled: true
|
|
141
|
+
Style/MapToSet: # new in 1.42
|
|
142
|
+
Enabled: true
|
|
143
|
+
Style/MinMaxComparison: # new in 1.42
|
|
144
|
+
Enabled: true
|
|
145
|
+
Style/MultilineInPatternThen: # new in 1.16
|
|
146
|
+
Enabled: true
|
|
147
|
+
Style/NegatedIfElseCondition: # new in 1.2
|
|
148
|
+
Enabled: true
|
|
149
|
+
Style/NestedFileDirname: # new in 1.26
|
|
150
|
+
Enabled: true
|
|
151
|
+
Style/NilLambda: # new in 1.3
|
|
152
|
+
Enabled: true
|
|
153
|
+
Style/NumberedParameters: # new in 1.22
|
|
154
|
+
Enabled: true
|
|
155
|
+
Style/NumberedParametersLimit: # new in 1.22
|
|
156
|
+
Enabled: true
|
|
157
|
+
Style/ObjectThen: # new in 1.28
|
|
158
|
+
Enabled: true
|
|
159
|
+
Style/OpenStructUse: # new in 1.23
|
|
160
|
+
Enabled: true
|
|
161
|
+
Style/OperatorMethodCall: # new in 1.37
|
|
162
|
+
Enabled: true
|
|
163
|
+
Style/QuotedSymbols: # new in 1.16
|
|
164
|
+
Enabled: true
|
|
165
|
+
Style/RedundantArgument: # new in 1.4
|
|
166
|
+
Enabled: true
|
|
167
|
+
Style/RedundantConstantBase: # new in 1.40
|
|
168
|
+
Enabled: true
|
|
169
|
+
Style/RedundantDoubleSplatHashBraces: # new in 1.41
|
|
170
|
+
Enabled: true
|
|
171
|
+
Style/RedundantEach: # new in 1.38
|
|
172
|
+
Enabled: true
|
|
173
|
+
Style/RedundantHeredocDelimiterQuotes: # new in 1.45
|
|
174
|
+
Enabled: true
|
|
175
|
+
Style/RedundantInitialize: # new in 1.27
|
|
176
|
+
Enabled: true
|
|
177
|
+
Style/RedundantLineContinuation: # new in 1.49
|
|
178
|
+
Enabled: true
|
|
179
|
+
Style/RedundantSelfAssignmentBranch: # new in 1.19
|
|
180
|
+
Enabled: true
|
|
181
|
+
Style/RedundantStringEscape: # new in 1.37
|
|
182
|
+
Enabled: true
|
|
183
|
+
Style/SelectByRegexp: # new in 1.22
|
|
184
|
+
Enabled: true
|
|
185
|
+
Style/StringChars: # new in 1.12
|
|
186
|
+
Enabled: true
|
|
187
|
+
Style/SwapValues: # new in 1.1
|
|
188
|
+
Enabled: true
|
data/.travis.yml
CHANGED
|
File without changes
|
data/CODE_OF_CONDUCT.md
CHANGED
|
File without changes
|
data/Gemfile
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source 'https://rubygems.org'
|
|
2
4
|
|
|
3
5
|
# Specify your gem's dependencies in easy_params.gemspec
|
|
4
6
|
gemspec
|
|
5
7
|
|
|
6
|
-
gem
|
|
7
|
-
gem
|
|
8
|
+
gem 'pry'
|
|
9
|
+
gem 'rake', '~> 12.0'
|
|
10
|
+
gem 'rspec', '~> 3.0'
|
|
11
|
+
gem 'rspec_vars_helper', '~> 0.1'
|
|
12
|
+
gem 'rubocop'
|
|
13
|
+
gem 'simplecov', '~> 0.17'
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
easy_params (0.
|
|
4
|
+
easy_params (0.3.0)
|
|
5
5
|
activemodel (>= 3.2, < 8)
|
|
6
6
|
dry-struct (~> 1.4)
|
|
7
7
|
dry-types (~> 1.5)
|
|
@@ -9,14 +9,16 @@ PATH
|
|
|
9
9
|
GEM
|
|
10
10
|
remote: https://rubygems.org/
|
|
11
11
|
specs:
|
|
12
|
-
activemodel (7.0.
|
|
13
|
-
activesupport (= 7.0.
|
|
14
|
-
activesupport (7.0.
|
|
12
|
+
activemodel (7.0.4.3)
|
|
13
|
+
activesupport (= 7.0.4.3)
|
|
14
|
+
activesupport (7.0.4.3)
|
|
15
15
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
16
16
|
i18n (>= 1.6, < 2)
|
|
17
17
|
minitest (>= 5.1)
|
|
18
18
|
tzinfo (~> 2.0)
|
|
19
|
-
|
|
19
|
+
ast (2.4.2)
|
|
20
|
+
coderay (1.1.3)
|
|
21
|
+
concurrent-ruby (1.2.2)
|
|
20
22
|
diff-lcs (1.4.4)
|
|
21
23
|
docile (1.3.5)
|
|
22
24
|
dry-configurable (0.14.0)
|
|
@@ -27,7 +29,7 @@ GEM
|
|
|
27
29
|
dry-configurable (~> 0.13, >= 0.13.0)
|
|
28
30
|
dry-core (0.7.1)
|
|
29
31
|
concurrent-ruby (~> 1.0)
|
|
30
|
-
dry-inflector (0.
|
|
32
|
+
dry-inflector (0.3.0)
|
|
31
33
|
dry-logic (1.2.0)
|
|
32
34
|
concurrent-ruby (~> 1.0)
|
|
33
35
|
dry-core (~> 0.5, >= 0.5)
|
|
@@ -41,11 +43,24 @@ GEM
|
|
|
41
43
|
dry-core (~> 0.5, >= 0.5)
|
|
42
44
|
dry-inflector (~> 0.1, >= 0.1.2)
|
|
43
45
|
dry-logic (~> 1.0, >= 1.0.2)
|
|
44
|
-
i18n (1.
|
|
46
|
+
i18n (1.14.1)
|
|
45
47
|
concurrent-ruby (~> 1.0)
|
|
46
48
|
ice_nine (0.11.2)
|
|
47
|
-
|
|
49
|
+
json (2.6.3)
|
|
50
|
+
method_source (1.0.0)
|
|
51
|
+
minitest (5.18.1)
|
|
52
|
+
parallel (1.23.0)
|
|
53
|
+
parser (3.2.2.3)
|
|
54
|
+
ast (~> 2.4.1)
|
|
55
|
+
racc
|
|
56
|
+
pry (0.14.2)
|
|
57
|
+
coderay (~> 1.1)
|
|
58
|
+
method_source (~> 1.0)
|
|
59
|
+
racc (1.7.1)
|
|
60
|
+
rainbow (3.1.1)
|
|
48
61
|
rake (12.3.3)
|
|
62
|
+
regexp_parser (2.8.1)
|
|
63
|
+
rexml (3.2.5)
|
|
49
64
|
rspec (3.10.0)
|
|
50
65
|
rspec-core (~> 3.10.0)
|
|
51
66
|
rspec-expectations (~> 3.10.0)
|
|
@@ -61,23 +76,39 @@ GEM
|
|
|
61
76
|
rspec-support (3.10.0)
|
|
62
77
|
rspec_vars_helper (0.1.0)
|
|
63
78
|
rspec (>= 2.4)
|
|
79
|
+
rubocop (1.52.1)
|
|
80
|
+
json (~> 2.3)
|
|
81
|
+
parallel (~> 1.10)
|
|
82
|
+
parser (>= 3.2.2.3)
|
|
83
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
84
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
85
|
+
rexml (>= 3.2.5, < 4.0)
|
|
86
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
|
87
|
+
ruby-progressbar (~> 1.7)
|
|
88
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
89
|
+
rubocop-ast (1.29.0)
|
|
90
|
+
parser (>= 3.2.1.0)
|
|
91
|
+
ruby-progressbar (1.13.0)
|
|
64
92
|
simplecov (0.21.2)
|
|
65
93
|
docile (~> 1.1)
|
|
66
94
|
simplecov-html (~> 0.11)
|
|
67
95
|
simplecov_json_formatter (~> 0.1)
|
|
68
96
|
simplecov-html (0.12.3)
|
|
69
97
|
simplecov_json_formatter (0.1.2)
|
|
70
|
-
tzinfo (2.0.
|
|
98
|
+
tzinfo (2.0.6)
|
|
71
99
|
concurrent-ruby (~> 1.0)
|
|
100
|
+
unicode-display_width (2.4.2)
|
|
72
101
|
|
|
73
102
|
PLATFORMS
|
|
74
103
|
ruby
|
|
75
104
|
|
|
76
105
|
DEPENDENCIES
|
|
77
106
|
easy_params!
|
|
107
|
+
pry
|
|
78
108
|
rake (~> 12.0)
|
|
79
109
|
rspec (~> 3.0)
|
|
80
110
|
rspec_vars_helper (~> 0.1)
|
|
111
|
+
rubocop
|
|
81
112
|
simplecov (~> 0.17)
|
|
82
113
|
|
|
83
114
|
BUNDLED WITH
|
data/LICENSE.txt
CHANGED
|
File without changes
|
data/README.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# EasyParams
|
|
2
2
|
|
|
3
|
+
[](https://badge.fury.io/rb/nina)
|
|
4
|
+
[](https://codeclimate.com/github/andriy-baran/easy_params/maintainability)
|
|
5
|
+
[](https://codeclimate.com/github/andriy-baran/easy_params/test_coverage)
|
|
6
|
+
|
|
7
|
+
Provides an easy way define structure, validation rules, type coercion and set default values for any hash-like structure. It's built on top of `dry-types`, `dry-structure` and `active_model/validations`.
|
|
8
|
+
|
|
9
|
+
## Types
|
|
10
|
+
|
|
11
|
+
Dry types are wrapped by class methods. Avaliable types: `integer`, `decimal`, `float`, `bool`, `string`, `array`, `date`, `datetime`, `time`, `struct`
|
|
12
|
+
|
|
3
13
|
## Installation
|
|
4
14
|
|
|
5
15
|
Add this line to your application's Gemfile:
|
|
@@ -47,7 +57,7 @@ Validation messages for nested attributes will look like this.
|
|
|
47
57
|
:"post/sections/0/id"=>an_instance_of(Array)
|
|
48
58
|
}
|
|
49
59
|
```
|
|
50
|
-
Optionally you can use more compact form
|
|
60
|
+
Optionally you can use more compact form
|
|
51
61
|
```ruby
|
|
52
62
|
class MyParams < EasyParams::Base
|
|
53
63
|
extend EasyParams::DSL
|
|
@@ -61,6 +71,8 @@ class MyParams < EasyParams::Base
|
|
|
61
71
|
end
|
|
62
72
|
end
|
|
63
73
|
```
|
|
74
|
+
This hovewer has some limitations: for attributes have name like `integer`, `decimal`, `float`, `bool`, `string`, `array`, `date`, `datetime`, `time`, `struct` it won't work as expected.
|
|
75
|
+
|
|
64
76
|
More examples here [params_spec.rb](https://github.com/andriy-baran/easy_params/blob/master/spec/easy_params_spec.rb)
|
|
65
77
|
|
|
66
78
|
## Development
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rspec/core/rake_task'
|
|
3
5
|
|
|
4
6
|
RSpec::Core::RakeTask.new(:spec)
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
require 'rubocop/rake_task'
|
|
9
|
+
|
|
10
|
+
RuboCop::RakeTask.new
|
|
11
|
+
|
|
12
|
+
task default: %i[spec rubocop]
|
data/bin/console
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
require 'easy_params'
|
|
5
6
|
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
|
@@ -10,5 +11,5 @@ require "easy_params"
|
|
|
10
11
|
# require "pry"
|
|
11
12
|
# Pry.start
|
|
12
13
|
|
|
13
|
-
require
|
|
14
|
+
require 'irb'
|
|
14
15
|
IRB.start(__FILE__)
|
data/easy_params.gemspec
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require_relative 'lib/easy_params/version'
|
|
2
4
|
|
|
3
5
|
Gem::Specification.new do |spec|
|
|
@@ -6,11 +8,11 @@ Gem::Specification.new do |spec|
|
|
|
6
8
|
spec.authors = ['Andrii Baran']
|
|
7
9
|
spec.email = ['andriy.baran.v@gmail.com']
|
|
8
10
|
|
|
9
|
-
spec.summary =
|
|
10
|
-
spec.description =
|
|
11
|
+
spec.summary = 'A tool that handles common tasks needed when working with params in Rails'
|
|
12
|
+
spec.description = 'Dessribe structure, validate and coerce values. Powered by dry-types and dry-struct'
|
|
11
13
|
spec.homepage = 'https://github.com/andriy-baran/easy_params'
|
|
12
14
|
spec.license = 'MIT'
|
|
13
|
-
spec.required_ruby_version = Gem::Requirement.new('>= 2.
|
|
15
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 2.6.0')
|
|
14
16
|
|
|
15
17
|
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
|
16
18
|
|
|
@@ -20,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
|
20
22
|
|
|
21
23
|
# Specify which files should be added to the gem when it is released.
|
|
22
24
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
23
|
-
spec.files
|
|
25
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
24
26
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
25
27
|
end
|
|
26
28
|
spec.bindir = 'exe'
|
|
@@ -34,8 +36,4 @@ Gem::Specification.new do |spec|
|
|
|
34
36
|
# spec.add_dependency 'dry-logic', '~> 0.4.2'
|
|
35
37
|
spec.add_dependency 'dry-struct', '~> 1.4'
|
|
36
38
|
spec.add_dependency 'dry-types', '~> 1.5'
|
|
37
|
-
|
|
38
|
-
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
39
|
-
spec.add_development_dependency 'rspec_vars_helper', '~> 0.1'
|
|
40
|
-
spec.add_development_dependency 'simplecov', '~> 0.17'
|
|
41
39
|
end
|
data/lib/easy_params/base.rb
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module EasyParams
|
|
4
|
+
# Implements validations logic and nesting structures
|
|
2
5
|
class Base < Dry::Struct
|
|
3
6
|
include ActiveModel::Validations
|
|
4
7
|
|
|
@@ -16,29 +19,48 @@ module EasyParams
|
|
|
16
19
|
validate_nested
|
|
17
20
|
end
|
|
18
21
|
|
|
22
|
+
private
|
|
23
|
+
|
|
19
24
|
def validate_nested
|
|
20
|
-
run_nested_validations
|
|
25
|
+
attributes.each(&run_nested_validations)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def run_nested_validations
|
|
29
|
+
proc do |attr_name, value, array_index, error_key_prefix|
|
|
21
30
|
case value
|
|
22
31
|
when Array
|
|
23
32
|
value.each.with_index do |element, i|
|
|
24
33
|
run_nested_validations[attr_name, element, i, error_key_prefix]
|
|
25
34
|
end
|
|
26
35
|
when self.class.struct
|
|
27
|
-
|
|
28
|
-
error_key_components = [error_key_prefix, attr_name, array_index]
|
|
29
|
-
attr_error_key_prefix = error_key_components.compact.join('/')
|
|
30
|
-
value.errors.each do |error_key, error_message|
|
|
31
|
-
errors.add("#{attr_error_key_prefix}/#{error_key}", error_message)
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
value.attributes.each do |nested_attr_name, nested_value|
|
|
35
|
-
run_nested_validations[nested_attr_name, nested_value, nil, attr_error_key_prefix]
|
|
36
|
-
end
|
|
37
|
-
else
|
|
38
|
-
# NOOP
|
|
36
|
+
handle_struct_validation(value, error_key_prefix, attr_name, array_index)
|
|
39
37
|
end
|
|
40
38
|
end
|
|
41
|
-
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def handle_struct_validation(value, error_key_prefix, attr_name, array_index)
|
|
42
|
+
if value.invalid?
|
|
43
|
+
error_key_components = [error_key_prefix, attr_name, array_index]
|
|
44
|
+
attr_error_key_prefix = error_key_components.compact.join('/')
|
|
45
|
+
add_errors_on_top_level(value, attr_error_key_prefix)
|
|
46
|
+
end
|
|
47
|
+
value.attributes.each do |nested_attr_name, nested_value|
|
|
48
|
+
run_nested_validations[nested_attr_name, nested_value, nil, attr_error_key_prefix]
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
if defined? ActiveModel::Error
|
|
53
|
+
def add_errors_on_top_level(value, attr_error_key_prefix)
|
|
54
|
+
value.errors.each do |error|
|
|
55
|
+
next unless error.options[:message]
|
|
56
|
+
|
|
57
|
+
errors.add("#{attr_error_key_prefix}/#{error.attribute}", error.options[:message])
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
else
|
|
61
|
+
def add_errors_on_top_level(value, attr_error_key_prefix)
|
|
62
|
+
value.errors.each { |key, message| errors.add("#{attr_error_key_prefix}/#{key}", message) }
|
|
63
|
+
end
|
|
42
64
|
end
|
|
43
65
|
end
|
|
44
66
|
end
|
data/lib/easy_params/dsl.rb
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module EasyParams
|
|
4
|
+
# Makes definition more compact
|
|
5
|
+
# Do not use if your attributes have name like
|
|
6
|
+
# integer, decimal, float, bool, string, array, date, datetime, time, struct
|
|
2
7
|
module DSL
|
|
3
8
|
def each(&block)
|
|
4
9
|
array.of(struct_dsl, &block)
|
|
@@ -11,5 +16,9 @@ module EasyParams
|
|
|
11
16
|
def method_missing(method_name, *args, &block)
|
|
12
17
|
public_send(:attribute, method_name, *args, &block)
|
|
13
18
|
end
|
|
19
|
+
|
|
20
|
+
def respond_to_missing?(*)
|
|
21
|
+
true
|
|
22
|
+
end
|
|
14
23
|
end
|
|
15
24
|
end
|
data/lib/easy_params/types.rb
CHANGED
data/lib/easy_params/version.rb
CHANGED
data/lib/easy_params.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: easy_params
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andrii Baran
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-06-24 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activemodel
|
|
@@ -58,48 +58,6 @@ dependencies:
|
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
60
|
version: '1.5'
|
|
61
|
-
- !ruby/object:Gem::Dependency
|
|
62
|
-
name: rspec
|
|
63
|
-
requirement: !ruby/object:Gem::Requirement
|
|
64
|
-
requirements:
|
|
65
|
-
- - "~>"
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version: '3.0'
|
|
68
|
-
type: :development
|
|
69
|
-
prerelease: false
|
|
70
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
71
|
-
requirements:
|
|
72
|
-
- - "~>"
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '3.0'
|
|
75
|
-
- !ruby/object:Gem::Dependency
|
|
76
|
-
name: rspec_vars_helper
|
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - "~>"
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0.1'
|
|
82
|
-
type: :development
|
|
83
|
-
prerelease: false
|
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - "~>"
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0.1'
|
|
89
|
-
- !ruby/object:Gem::Dependency
|
|
90
|
-
name: simplecov
|
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - "~>"
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0.17'
|
|
96
|
-
type: :development
|
|
97
|
-
prerelease: false
|
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - "~>"
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '0.17'
|
|
103
61
|
description: Dessribe structure, validate and coerce values. Powered by dry-types
|
|
104
62
|
and dry-struct
|
|
105
63
|
email:
|
|
@@ -108,8 +66,10 @@ executables: []
|
|
|
108
66
|
extensions: []
|
|
109
67
|
extra_rdoc_files: []
|
|
110
68
|
files:
|
|
69
|
+
- ".github/workflows/ruby.yml"
|
|
111
70
|
- ".gitignore"
|
|
112
71
|
- ".rspec"
|
|
72
|
+
- ".rubocop.yml"
|
|
113
73
|
- ".travis.yml"
|
|
114
74
|
- CODE_OF_CONDUCT.md
|
|
115
75
|
- Gemfile
|
|
@@ -132,7 +92,7 @@ metadata:
|
|
|
132
92
|
allowed_push_host: https://rubygems.org
|
|
133
93
|
homepage_uri: https://github.com/andriy-baran/easy_params
|
|
134
94
|
source_code_uri: https://github.com/andriy-baran/easy_params
|
|
135
|
-
post_install_message:
|
|
95
|
+
post_install_message:
|
|
136
96
|
rdoc_options: []
|
|
137
97
|
require_paths:
|
|
138
98
|
- lib
|
|
@@ -140,15 +100,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
140
100
|
requirements:
|
|
141
101
|
- - ">="
|
|
142
102
|
- !ruby/object:Gem::Version
|
|
143
|
-
version: 2.
|
|
103
|
+
version: 2.6.0
|
|
144
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
145
105
|
requirements:
|
|
146
106
|
- - ">="
|
|
147
107
|
- !ruby/object:Gem::Version
|
|
148
108
|
version: '0'
|
|
149
109
|
requirements: []
|
|
150
|
-
rubygems_version: 3.
|
|
151
|
-
signing_key:
|
|
110
|
+
rubygems_version: 3.3.26
|
|
111
|
+
signing_key:
|
|
152
112
|
specification_version: 4
|
|
153
113
|
summary: A tool that handles common tasks needed when working with params in Rails
|
|
154
114
|
test_files: []
|