broi-input 0.1.2 → 0.1.3

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: 9ec70915468a81f1e76fd79fa968c819a708c8d65040b2feee9da121f6f21458
4
- data.tar.gz: 1ba022fe06b37bac5d8d59aa263420cd5069cc481a215c43dbb58c5b2e665093
3
+ metadata.gz: e13c93b82d7cb1ba3fa069fcb9c5bda023c61c6988281f7147b767043a97d7dc
4
+ data.tar.gz: fa65e198e065ae420b64b9e9134d23cb43359858f59dbdcef13e49ee7b43f7f9
5
5
  SHA512:
6
- metadata.gz: 35b14bb7ffa1339d748fb21cc66bb545ff231dde3f78798282199adfc72f192af22cba0e86e9780750948ebc0129f83805bd54a52918596097bd041fb943d603
7
- data.tar.gz: 781d9b48dc23b59c32cf24ed7c174e3c04c2dca8de0edaafeada7321e244776cc5a32ddf668888a5a6540518f796362f02adc4eec3d8bd5977c6aaa3a0d96181
6
+ metadata.gz: 150a21be121b39c47a2e85a00fcc406521ae6b4185ca034ede43a0250e410e936f493e86f051f132dac15cab6386c6902fb60af7283eac2f92f66ce3ced929b4
7
+ data.tar.gz: b7e507c92ec3e84d1938e86d67be7f4add22596f5091546dec9ab5c93c4f9b9517b3c57e05886bf54186f560cb961a020357ce6ca7d1b4fa25a711fb85dd66f7
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- broi-input (0.1.1)
4
+ broi-input (0.1.2)
5
5
  dry-monads (~> 1.0)
6
6
  dry-struct (~> 0.5)
7
7
  dry-validation (~> 0.12)
data/input.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 = 'broi-input'
7
- spec.version = '0.1.2'
7
+ spec.version = '0.1.3'
8
8
  spec.authors = ['broisatse']
9
9
  spec.email = ['sklajn@gmail.com']
10
10
 
@@ -0,0 +1,49 @@
1
+ module Broi
2
+ # TODO: Separate gem?
3
+ class Errors
4
+ include Enumerable
5
+
6
+ def initialize(error_hash = {})
7
+ @errors = errorize_hash(error_hash)
8
+ end
9
+
10
+ def to_nested_hash
11
+ Broi::Input::Utils.deep_transform_values(@errors) do |value|
12
+ value.respond_to?(:to_nested_hash) ? value.to_nested_hash : value
13
+ end
14
+ end
15
+
16
+ def to_flat_hash
17
+ result = {}
18
+ @errors.each do |key, value|
19
+ if value.respond_to?(:to_flat_hash)
20
+ value.to_flat_hash.each do |inner_key, inner_value|
21
+ result[:"#{key}.#{inner_key}"] = inner_value.dup
22
+ end
23
+ else
24
+ result[key] = value.dup
25
+ end
26
+ end
27
+ result
28
+ end
29
+
30
+ def each(&block)
31
+ to_flat_hash.each(&block)
32
+ end
33
+
34
+ def [](key)
35
+ key, nested = key.to_s.split('.', 2)
36
+ return unless (result = @errors[key.to_sym])
37
+ return result unless nested
38
+ result[nested]
39
+ end
40
+
41
+ alias empty? none?
42
+
43
+ private
44
+
45
+ def errorize_hash(hash)
46
+ hash.map {|k, v| [k.to_sym, v.is_a?(Hash) ? Errors.new(errorize_hash(v)) : v] }.to_h
47
+ end
48
+ end
49
+ end
@@ -6,7 +6,7 @@ module Broi
6
6
  end
7
7
 
8
8
  def errors
9
- {}
9
+ Errors.new({})
10
10
  end
11
11
  end
12
12
  end
data/lib/broi/input.rb CHANGED
@@ -2,6 +2,7 @@ require 'dry-struct'
2
2
  require 'dry/validation'
3
3
  require 'dry/monads/result'
4
4
 
5
+ require 'broi/errors'
5
6
  require 'broi/input/success'
6
7
  require 'broi/input/failure'
7
8
  require 'broi/input/utils'
@@ -9,8 +10,6 @@ require 'broi/input/value'
9
10
  require 'broi/input/invalid_value'
10
11
  require 'broi/input/soft'
11
12
 
12
- require 'byebug'
13
-
14
13
  module Broi
15
14
  class Input < Dry::Struct::Value
16
15
 
@@ -43,18 +42,10 @@ module Broi
43
42
  def call(params = {})
44
43
  result = validation.(params)
45
44
  input = Soft.(self, result.output, result.errors)
46
- # output = input[result.output]
47
- # input = Utils.deep_merge(output, result.errors) do |target, _error|
48
- # InvalidValue.new(target)
49
- # end
50
- # input = Utils.deep_transform_values(input) do |value|
51
- # value.is_a?(InvalidValue) ? value : Value.new(value)
52
- # end
53
- # input = new(input)
54
45
  if result.success?
55
46
  Success.new(input)
56
47
  else
57
- Failure.new(input, result.errors)
48
+ Failure.new(input, Errors.new(result.errors))
58
49
  end
59
50
  end
60
51
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: broi-input
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - broisatse
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-14 00:00:00.000000000 Z
11
+ date: 2018-07-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-validation
@@ -141,6 +141,7 @@ files:
141
141
  - bin/console
142
142
  - bin/setup
143
143
  - input.gemspec
144
+ - lib/broi/errors.rb
144
145
  - lib/broi/input.rb
145
146
  - lib/broi/input/failure.rb
146
147
  - lib/broi/input/invalid_error.rb