salestation 4.4.2 → 4.6.1

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: 8de4efec567a218753f1b529394006e24294cba52a8f63c68c3a3a311cc04e87
4
- data.tar.gz: 8a906d43283751e9e173a6f99ca8a36a2ab64f663d04470158272d8f7c153b1c
3
+ metadata.gz: a1245b9d949f1d4f8cfb1ce04208f72cd4b0601e9bc798f65a86a83199deb1e1
4
+ data.tar.gz: d35c8d0364840fb99a3667d007e9cc2ae9c80111bdd86b245f159ab337a98932
5
5
  SHA512:
6
- metadata.gz: dccaa52c41c6aceaca03284c9a185920e2b297449ce5a04696458df7d76a3828a1cf6b650d7a73b749d509d4a0833e1469da14f4954f625fa0ebf9ef917660ee
7
- data.tar.gz: 3b3bc59d4f1e4bc221bbb30b83e74a74aee0ac00c2cd47e69e660ebaf003f16838e050ab8f49ebdc278e1ed82a6389adce2621d4f7092045262a3fce8be3205f
6
+ metadata.gz: c1fe8ec62ba1562d3ab7d24b96657c2eebc47c898e226f4a5af84050a3f839cdb850828e79da6caed07f958a3560881cf068690cff3f1c27fad55b12793c2c33
7
+ data.tar.gz: be76d4e7151eeb1dcd378fd65c0f12d1c519cceb652eb8cb702f6db3692a7491e8190aecd0434fea27671b04ef379765fa062d1bffe91bd5c0ebeec0c0a5795c
@@ -0,0 +1,22 @@
1
+ name: Publish Gem
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ jobs:
8
+ build:
9
+ runs-on: ubuntu-latest
10
+
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ with:
14
+ fetch-depth: 2
15
+
16
+
17
+ - name: Release Gem
18
+ uses: discourse/publish-rubygems-action@b55d7b91b55e61752dc6cbc2972f8e16fe6c1a02
19
+ env:
20
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
21
+ RUBYGEMS_API_KEY: ${{secrets.RUBYGEMS_API_KEY}}
22
+ RELEASE_COMMAND: rake release
data/README.md CHANGED
@@ -210,7 +210,7 @@ See lib/salestation/rspec.rb for more examples.
210
210
 
211
211
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
212
212
 
213
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
213
+ To install this gem onto your local machine, run `bundle exec rake install`. A new version is created when a change is merged into the master branch that changes the version number in `salestation.gemspec`. A Github Action will create a tag for the version and push the `.gem` file to [rubygems.org](https://rubygems.org).
214
214
 
215
215
  ## Contributing
216
216
 
@@ -5,13 +5,29 @@ module Salestation
5
5
  module InputVerification
6
6
  def verify_input(schema)
7
7
  -> (request) do
8
- result = schema.call(request.input)
9
- if result.success?
10
- request.replace_input(result.output)
8
+ input = request.input
9
+ result = schema.call(input)
10
+
11
+ dry_validation_version = Gem.loaded_specs['dry-validation'].version
12
+ if dry_validation_version < Gem::Version.new('1.0')
13
+ Mapper.from_dry_validation_result(result.output, result.errors, custom_error_map)
14
+ if result.success?
15
+ request.replace_input(result.output)
16
+ else
17
+ Deterministic::Result::Failure(
18
+ Errors::InvalidInput.new(errors: result.errors, hints: result.hints)
19
+ )
20
+ end
21
+ elsif dry_validation_version <= Gem::Version.new('1.8')
22
+ if result.success?
23
+ request.replace_input(input)
24
+ else
25
+ Deterministic::Result::Failure(
26
+ Errors::InvalidInput.new(errors: result.errors.to_h, hints: result.hints.to_h)
27
+ )
28
+ end
11
29
  else
12
- Deterministic::Result::Failure(
13
- Errors::InvalidInput.new(errors: result.errors, hints: result.hints)
14
- )
30
+ raise 'Unsupported dry-validation version'
15
31
  end
16
32
  end
17
33
  end
@@ -21,6 +21,10 @@ module Salestation
21
21
  def coerce(rules)
22
22
  InputCoercer.new(self, rules)
23
23
  end
24
+
25
+ def rename(rules)
26
+ InputRenamer.new(self, rules)
27
+ end
24
28
  end
25
29
 
26
30
  class CombinedInputExtractor
@@ -88,6 +92,76 @@ module Salestation
88
92
  end
89
93
  end
90
94
 
95
+ # Handles renaming input keys
96
+ #
97
+ # When renaming we want to ensure that the new key provided for the rename does not already
98
+ # exist in the input. When it does and it has a not nil value, then rename will not happen,
99
+ # unless `override: true` is also applied. When the new key exists with nil value,
100
+ # rename will happen.
101
+ # By default override is set to false: when input already has value set for the new key,
102
+ # the old key will be discarded instead of overwriting the value.
103
+ # For deprecating (renaming for deprecation purposes), one should extract both new and old key
104
+ # from the input before calling the rename function, to get expected result, as only then the
105
+ # values can be compared in rename.
106
+ #
107
+ # @example
108
+ # original_input = {
109
+ # x: 'a',
110
+ # y: 'b'
111
+ # }
112
+ #
113
+ # extractor = BodyParamExtractor[:x, :y]
114
+ # .rename(x: :z)
115
+ # input = {
116
+ # z: 'a',
117
+ # y: 'b'
118
+ # }
119
+ #
120
+ # extractor = BodyParamExtractor[:x, :y]
121
+ # .rename(x: :y)
122
+ # input = {
123
+ # y: 'b'
124
+ # }
125
+ # extractor = BodyParamExtractor[:x, :y]
126
+ # .rename(x: {new_key: :y, override: true})
127
+ # input = {
128
+ # y: 'a'
129
+ # }
130
+ class InputRenamer
131
+ def initialize(extractor, rules)
132
+ @extractor = extractor
133
+ @rules = map_rules(rules)
134
+ end
135
+
136
+ def call(rack_request)
137
+ @extractor
138
+ .call(rack_request)
139
+ .map(&method(:rename))
140
+ end
141
+
142
+ def rename(input)
143
+ @rules.each do |old_key, rule|
144
+ new_key = rule[:new_key]
145
+ override = rule[:override]
146
+
147
+ if input[new_key].nil? || override
148
+ input[new_key] = input[old_key]
149
+ end
150
+
151
+ input.delete(old_key)
152
+ end
153
+ Deterministic::Result::Success(input)
154
+ end
155
+
156
+ private
157
+
158
+ def map_rules(rules)
159
+ rules.map do |field, rule|
160
+ [field, rule.is_a?(Hash) ? rule : {new_key: rule, override: false}]
161
+ end.to_h
162
+ end
163
+ end
164
+
91
165
  class HeadersExtractor
92
166
  include Deterministic
93
167
 
data/salestation.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "salestation"
7
- spec.version = "4.4.2"
7
+ spec.version = "4.6.1"
8
8
  spec.authors = ["Glia TechMovers"]
9
9
  spec.email = ["techmovers@glia.com"]
10
10
 
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rspec", "~> 3.0"
25
25
  spec.add_development_dependency "pry", "~> 0.10.4"
26
26
  spec.add_development_dependency "glia-errors", "~> 0.11.4"
27
- spec.add_development_dependency "dry-validation", "~> 1.6.0"
27
+ spec.add_development_dependency "dry-validation", "~> 1.7.0"
28
28
 
29
29
  spec.add_dependency 'deterministic'
30
30
  spec.add_dependency 'dry-struct'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: salestation
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.4.2
4
+ version: 4.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Glia TechMovers
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-15 00:00:00.000000000 Z
11
+ date: 2022-04-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.6.0
89
+ version: 1.7.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: 1.6.0
96
+ version: 1.7.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: deterministic
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -157,6 +157,7 @@ executables: []
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
+ - ".github/workflows/publish.yml"
160
161
  - ".github/workflows/ruby.yml"
161
162
  - ".gitignore"
162
163
  - ".rspec"
@@ -188,7 +189,7 @@ homepage: ''
188
189
  licenses:
189
190
  - MIT
190
191
  metadata: {}
191
- post_install_message:
192
+ post_install_message:
192
193
  rdoc_options: []
193
194
  require_paths:
194
195
  - lib
@@ -203,8 +204,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
204
  - !ruby/object:Gem::Version
204
205
  version: '0'
205
206
  requirements: []
206
- rubygems_version: 3.1.2
207
- signing_key:
207
+ rubygems_version: 3.1.6
208
+ signing_key:
208
209
  specification_version: 4
209
210
  summary: ''
210
211
  test_files: []