linearly 0.1.3 → 0.1.4

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: 2528725570ecfd8cced2b0718a9859be207fa15ffd6cb265bdd5976f5eb626e4
4
- data.tar.gz: 478800acf301111d2f714ccd236fa9d9cecbb0d9ffc2b09c0dddf093dd382986
3
+ metadata.gz: 50a3c517f78d9e37fad6f7fbf445cc5d3569244b85163e2a1974e7d247c957ba
4
+ data.tar.gz: cf2e7d85b851095308eced41285adcc3ae9c86786d1338d7b80052511ac2e9e5
5
5
  SHA512:
6
- metadata.gz: 4cab82060fe000080f29ba4a01b90cbf8081af67879bc8119da01f0ea6c16fd42a6677b7490cc3135b5e004517c6521cdbc33c0d9af1fbe024f8c45c6947a97d
7
- data.tar.gz: a4e40ef75656a065a48dee68662b141150dacbca4c2e1e950385fa3359bca844cf1b32bc7dac71d83dbd1d8b2493edccb472d0f4b23b62453fbb10249e700e6e
6
+ metadata.gz: 1a8f5d4f0bd5304e53fdc41558b6ce9c3722d342706a2d312aab8293cd40eb999248adff0fc7d1f5934620c4232d2e79f02aa62344c43745c366cf916246e1d1
7
+ data.tar.gz: 3f625d7a397cb45021381d9e3413a031989d0a1d4311fab12a3f9047d10c7281b1b2ac69a11bb45a15d194029fc64ad833a280b8f4917d5646b570411d152798
@@ -36,18 +36,31 @@ module Linearly
36
36
 
37
37
  # Constructor for a {BrokenContract} error
38
38
  #
39
+ # @param source [Object]
39
40
  # @param failures [Hash<Symbol, Validation::Failure>]
40
41
  #
41
42
  # @api public
42
43
  # @example
43
44
  # Linearly::Errors::BrokenContract::Inputs.new(
45
+ # Steps::HelloWorld,
44
46
  # key: Linearly::Validation::Failure::Missing.instance,
45
47
  # )
46
48
  # => #<Linearly::Errors::BrokenContract::Inputs:
47
- # failed input expectations: [key]>
48
- def initialize(failures)
49
+ # failed input expectations on Steps::HelloWorld: [key]>
50
+ def initialize(source, failures)
51
+ @source = source
49
52
  @failures = failures
50
- super("#{copy}: [#{keys.join(', ')}]")
53
+ super("#{copy} on #{source_string}: [#{keys.join(', ')}]")
54
+ end
55
+
56
+ private
57
+
58
+ # Stringify the source to put it in the error message
59
+ #
60
+ # @return [String]
61
+ # @api private
62
+ def source_string
63
+ @source.is_a?(Class) ? @source.name : @source.class.name
51
64
  end
52
65
 
53
66
  # {Inputs} means a {BrokenContract} on inputs.
data/lib/linearly/flow.rb CHANGED
@@ -79,9 +79,9 @@ module Linearly
79
79
  # @api private
80
80
  def steps
81
81
  [
82
- Validation::Inputs.new(inputs),
82
+ Validation::Inputs.new(self, inputs),
83
83
  *@steps.map(&Runner.method(:new)),
84
- Validation::Outputs.new(outputs),
84
+ Validation::Outputs.new(self, outputs),
85
85
  ]
86
86
  end
87
87
 
@@ -28,9 +28,9 @@ module Linearly
28
28
  # @api private
29
29
  def steps
30
30
  [
31
- Validation::Inputs.new(step.inputs),
31
+ Validation::Inputs.new(step, step.inputs),
32
32
  step,
33
- Validation::Outputs.new(step.outputs),
33
+ Validation::Outputs.new(step, step.outputs),
34
34
  ]
35
35
  end
36
36
  end
@@ -7,13 +7,16 @@ module Linearly
7
7
  class Validation
8
8
  # Constructor for a {Validation}
9
9
  #
10
+ # @param source [Object] source of the validation, to be passed to errors
11
+ # for better messaging.
10
12
  # @param expectations [Hash<Symbol, Expectation>] a hash of per-field
11
13
  # expectations. An expectation can be +true+ (just checking for field
12
14
  # presence), a class name (checking for value type) or a +Proc+
13
15
  # taking a value and returning a +Boolean+.
14
16
  #
15
17
  # @api private
16
- def initialize(expectations)
18
+ def initialize(source, expectations)
19
+ @source = source
17
20
  @expectations =
18
21
  expectations
19
22
  .map { |key, expectation| [key, Expectation.to_proc(expectation)] }
@@ -28,7 +31,7 @@ module Linearly
28
31
  # @api private
29
32
  def call(state)
30
33
  Validator
31
- .new(expectations, state)
34
+ .new(@source, expectations, state)
32
35
  .validate(error_class)
33
36
  end
34
37
 
@@ -70,11 +73,14 @@ module Linearly
70
73
  class Validator
71
74
  # Constructor method for a {Validator}
72
75
  #
76
+ # @param source [Object] source of the validation, to be passed to errors
77
+ # for better messaging.
73
78
  # @param expectations [Hash<Symbol, Expectation>]
74
79
  # @param state [Statefully::State]
75
80
  #
76
81
  # @api private
77
- def initialize(expectations, state)
82
+ def initialize(source, expectations, state)
83
+ @source = source
78
84
  @expectations = expectations
79
85
  @state = state
80
86
  end
@@ -88,7 +94,7 @@ module Linearly
88
94
  def validate(error_class)
89
95
  failures = invalid.merge(missing).freeze
90
96
  return @state if failures.empty?
91
- @state.fail(error_class.new(failures))
97
+ @state.fail(error_class.new(@source, failures))
92
98
  end
93
99
 
94
100
  private
@@ -1,3 +1,3 @@
1
1
  module Linearly
2
- VERSION = '0.1.3'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  end
@@ -9,17 +9,21 @@ module Linearly
9
9
  unexpected: Validation::Failure::Unexpected.instance,
10
10
  }
11
11
  end
12
- let(:error) { described_class.new(failures) }
12
+ let(:error) { described_class.new('string', failures) }
13
13
 
14
14
  describe BrokenContract::Inputs do
15
- let(:message) { 'failed input expectations: [missing, unexpected]' }
15
+ let(:message) do
16
+ 'failed input expectations on String: [missing, unexpected]'
17
+ end
16
18
 
17
19
  it { expect(error.message).to eq message }
18
20
  it { expect(error.failures).to eq failures }
19
21
  end
20
22
 
21
23
  describe BrokenContract::Outputs do
22
- let(:message) { 'failed output expectations: [missing, unexpected]' }
24
+ let(:message) do
25
+ 'failed output expectations on String: [missing, unexpected]'
26
+ end
23
27
 
24
28
  it { expect(error.message).to eq message }
25
29
  it { expect(error.failures).to eq failures }
@@ -2,7 +2,7 @@ require 'spec_helper'
2
2
 
3
3
  module Linearly
4
4
  describe Validation do
5
- let(:validation) { described_class.new(expectations).call(state) }
5
+ let(:validation) { described_class.new('string', expectations).call(state) }
6
6
  let(:state) { Statefully::State.create(key: 'val') }
7
7
 
8
8
  shared_examples 'validation_fails' do |error_class|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: linearly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Wyszynski