pathway 0.9.1 → 0.11.3
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/.circleci/config.yml +38 -0
- data/CHANGELOG.md +22 -0
- data/Gemfile +0 -2
- data/README.md +91 -50
- data/Rakefile +2 -0
- data/lib/pathway.rb +3 -1
- data/lib/pathway/plugins/dry_validation.rb +17 -91
- data/lib/pathway/plugins/dry_validation/v0_11.rb +86 -0
- data/lib/pathway/plugins/dry_validation/v0_12.rb +86 -0
- data/lib/pathway/plugins/dry_validation/v1_0.rb +78 -0
- data/lib/pathway/plugins/responder.rb +2 -0
- data/lib/pathway/plugins/sequel_models.rb +31 -16
- data/lib/pathway/plugins/simple_auth.rb +2 -0
- data/lib/pathway/result.rb +2 -0
- data/lib/pathway/rspec.rb +2 -0
- data/lib/pathway/rspec/matchers.rb +2 -0
- data/lib/pathway/rspec/matchers/accept_optional_fields.rb +31 -6
- data/lib/pathway/rspec/matchers/fail_on.rb +5 -3
- data/lib/pathway/rspec/matchers/field_list_helpers.rb +4 -2
- data/lib/pathway/rspec/matchers/form_schema_helpers.rb +47 -3
- data/lib/pathway/rspec/matchers/list_helpers.rb +5 -3
- data/lib/pathway/rspec/matchers/require_fields.rb +30 -5
- data/lib/pathway/rspec/matchers/succeed_on.rb +3 -1
- data/lib/pathway/version.rb +3 -1
- data/pathway.gemspec +6 -5
- metadata +13 -10
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathway/rspec/matchers/list_helpers'
|
2
4
|
|
3
5
|
module Pathway
|
@@ -10,11 +12,11 @@ module Pathway
|
|
10
12
|
end
|
11
13
|
|
12
14
|
def were_was(list)
|
13
|
-
list.size > 1 ?
|
15
|
+
list.size > 1 ? 'were' : 'was'
|
14
16
|
end
|
15
17
|
|
16
18
|
def pluralize_fields
|
17
|
-
@fields.size > 1 ?
|
19
|
+
@fields.size > 1 ? 'fields' : 'field'
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathway/rspec/matchers/field_list_helpers'
|
2
4
|
|
3
5
|
module Pathway
|
@@ -5,14 +7,28 @@ module Pathway
|
|
5
7
|
module FormSchemaHelpers
|
6
8
|
include FieldListHelpers
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
if defined?(::Dry::Validation::Contract)
|
11
|
+
def rules
|
12
|
+
@form.schema.rules
|
13
|
+
end
|
14
|
+
else
|
15
|
+
def rules
|
16
|
+
@form.rules
|
17
|
+
end
|
10
18
|
end
|
11
19
|
|
12
20
|
def not_defined_list
|
13
21
|
"#{as_list(not_defined)} #{were_was(not_defined)} not defined" if not_defined.any?
|
14
22
|
end
|
15
23
|
|
24
|
+
def accepting_null_list
|
25
|
+
"#{as_list(null_value_allowed)} #{were_was(null_value_allowed)} accepting null values" if @not_allowing_null_values && null_value_allowed.any?
|
26
|
+
end
|
27
|
+
|
28
|
+
def not_accepting_null_list
|
29
|
+
"#{as_list(null_value_disallowed)} #{were_was(null_value_disallowed)} not accepting null values" if @allowing_null_values && null_value_disallowed.any?
|
30
|
+
end
|
31
|
+
|
16
32
|
def required
|
17
33
|
@required ||= @fields.select { |field| required?(field) }
|
18
34
|
end
|
@@ -21,12 +37,20 @@ module Pathway
|
|
21
37
|
@optional ||= @fields.select { |field| optional?(field) }
|
22
38
|
end
|
23
39
|
|
40
|
+
def null_value_allowed
|
41
|
+
@null_value_allowed ||= @fields.select { |field| null_value_allowed?(field) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def null_value_disallowed
|
45
|
+
@null_value_disallowed ||= @fields.select { |field| null_value_disallowed?(field) }
|
46
|
+
end
|
47
|
+
|
24
48
|
def not_required
|
25
49
|
@not_required ||= defined - required
|
26
50
|
end
|
27
51
|
|
28
52
|
def not_optional
|
29
|
-
@
|
53
|
+
@not_optional ||= defined - optional
|
30
54
|
end
|
31
55
|
|
32
56
|
def not_defined
|
@@ -52,6 +76,26 @@ module Pathway
|
|
52
76
|
left.type == :predicate && left.name == :key? && left.args.first == field
|
53
77
|
end
|
54
78
|
end
|
79
|
+
|
80
|
+
def allowing_null_values_matches?
|
81
|
+
@allowing_null_values ? @fields.all? { |field| null_value_allowed?(field) } : true
|
82
|
+
end
|
83
|
+
|
84
|
+
def not_allowing_null_values_matches?
|
85
|
+
@not_allowing_null_values ? @fields.all? { |field| null_value_disallowed?(field) } : true
|
86
|
+
end
|
87
|
+
|
88
|
+
def null_value_allowed?(field)
|
89
|
+
rule = rules[field]&.right&.rule
|
90
|
+
predicate = rule&.left
|
91
|
+
predicate.present? && predicate.type == :not && predicate.rules&.first&.name == :nil?
|
92
|
+
end
|
93
|
+
|
94
|
+
def null_value_disallowed?(field)
|
95
|
+
rule = rules[field]&.right&.rule
|
96
|
+
predicate = rule&.left
|
97
|
+
predicate.present? && predicate.type == :predicate && predicate.name == :filled?
|
98
|
+
end
|
55
99
|
end
|
56
100
|
end
|
57
101
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Pathway
|
2
4
|
module Rspec
|
3
5
|
module ListHelpers
|
4
|
-
def as_list(items)
|
5
|
-
as_sentence(items.map(&:inspect))
|
6
|
+
def as_list(items, **kwargs)
|
7
|
+
as_sentence(items.map(&:inspect), **kwargs)
|
6
8
|
end
|
7
9
|
|
8
|
-
def as_sentence(items, connector:
|
10
|
+
def as_sentence(items, connector: ', ', last_connector: ' and ')
|
9
11
|
*rest, last = items
|
10
12
|
|
11
13
|
result = String.new
|
@@ -1,30 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathway/rspec/matchers/form_schema_helpers'
|
2
4
|
|
3
5
|
RSpec::Matchers.define :require_fields do |*fields|
|
4
6
|
match do |form|
|
5
7
|
@form, @fields = form, fields
|
6
8
|
|
7
|
-
not_defined.empty? &&
|
9
|
+
not_defined.empty? &&
|
10
|
+
not_required.empty? &&
|
11
|
+
allowing_null_values_matches? &&
|
12
|
+
not_allowing_null_values_matches?
|
8
13
|
end
|
9
14
|
|
10
15
|
match_when_negated do |form|
|
16
|
+
raise NotImplementedError, 'expect().not_to require_fields.not_allowing_null_values is not supported.' if @allowing_null_values || @not_allowing_null_values
|
17
|
+
|
11
18
|
@form, @fields = form, fields
|
12
19
|
|
13
20
|
not_defined.empty? && required.empty?
|
14
21
|
end
|
15
22
|
|
16
23
|
description do
|
17
|
-
|
24
|
+
null_value_allowed = @allowing_null_values ? ' allowing null values' : ''
|
25
|
+
null_value_disallowed = @not_allowing_null_values ? ' not allowing null values' : ''
|
26
|
+
"require #{field_list} as #{pluralize_fields}#{null_value_allowed}#{null_value_disallowed}"
|
18
27
|
end
|
19
28
|
|
20
29
|
failure_message do
|
21
|
-
|
22
|
-
|
30
|
+
null_value_allowed = @allowing_null_values ? ' allowing null values' : ''
|
31
|
+
null_value_disallowed = @not_allowing_null_values ? ' not allowing null values' : ''
|
32
|
+
|
33
|
+
"Expected to require #{field_list} as #{pluralize_fields}#{null_value_allowed}#{null_value_disallowed} but " +
|
34
|
+
as_sentence([not_required_list, not_defined_list, accepting_null_list, not_accepting_null_list].compact,
|
35
|
+
connector: '; ', last_connector: '; and ')
|
23
36
|
end
|
24
37
|
|
25
38
|
failure_message_when_negated do
|
26
39
|
"Did not expect to require #{field_list} as #{pluralize_fields} but " +
|
27
|
-
[required_list, not_defined_list].compact.join(
|
40
|
+
[required_list, not_defined_list].compact.join('; and ')
|
28
41
|
end
|
29
42
|
|
30
43
|
include Pathway::Rspec::FormSchemaHelpers
|
@@ -36,6 +49,18 @@ RSpec::Matchers.define :require_fields do |*fields|
|
|
36
49
|
def not_required_list
|
37
50
|
"#{as_list(not_required)} #{were_was(not_required)} not required" if not_required.any?
|
38
51
|
end
|
52
|
+
|
53
|
+
chain :allowing_null_values do
|
54
|
+
fail 'cannot use allowing_null_values and not_allowing_null_values at the same time' if @not_allowing_null_values
|
55
|
+
|
56
|
+
@allowing_null_values = true
|
57
|
+
end
|
58
|
+
|
59
|
+
chain :not_allowing_null_values do
|
60
|
+
fail 'cannot use allowing_null_values and not_allowing_null_values at the same time' if @allowing_null_values
|
61
|
+
|
62
|
+
@not_allowing_null_values = true
|
63
|
+
end
|
39
64
|
end
|
40
65
|
|
41
66
|
RSpec::Matchers.alias_matcher :require_field, :require_fields
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
RSpec::Matchers.define :succeed_on do |input|
|
2
4
|
match do |operation|
|
3
5
|
@operation, @input = operation, input
|
@@ -29,7 +31,7 @@ RSpec::Matchers.define :succeed_on do |input|
|
|
29
31
|
end
|
30
32
|
|
31
33
|
failure_message_when_negated do
|
32
|
-
|
34
|
+
'Did not to expected operation to be successful but it was'
|
33
35
|
end
|
34
36
|
|
35
37
|
def success?
|
data/lib/pathway/version.rb
CHANGED
data/pathway.gemspec
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
lib = File.expand_path("../lib", __FILE__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
5
|
require "pathway/version"
|
@@ -14,7 +15,7 @@ Gem::Specification.new do |spec|
|
|
14
15
|
spec.homepage = "https://github.com/pabloh/pathway"
|
15
16
|
spec.license = "MIT"
|
16
17
|
|
17
|
-
spec.metadata
|
18
|
+
spec.metadata = {
|
18
19
|
"bug_tracker_uri" => "https://github.com/pabloh/pathway/issues",
|
19
20
|
"source_code_uri" => "https://github.com/pabloh/pathway",
|
20
21
|
}
|
@@ -31,10 +32,10 @@ Gem::Specification.new do |spec|
|
|
31
32
|
spec.add_dependency "dry-inflector", ">= 0.1.0"
|
32
33
|
spec.add_dependency "contextualizer", "~> 0.0.4"
|
33
34
|
|
34
|
-
spec.add_development_dependency "dry-validation", "
|
35
|
+
spec.add_development_dependency "dry-validation", ">= 0.11"
|
35
36
|
spec.add_development_dependency "bundler", ">= 1.14.0"
|
36
|
-
spec.add_development_dependency "sequel", "~>
|
37
|
-
spec.add_development_dependency "rake", "~>
|
37
|
+
spec.add_development_dependency "sequel", "~> 5.25.0"
|
38
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
38
39
|
spec.add_development_dependency "rspec", "~> 3.0"
|
39
40
|
spec.add_development_dependency "coveralls"
|
40
41
|
spec.add_development_dependency "pry"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pathway
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Herrero
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dry-inflector
|
@@ -42,14 +42,14 @@ dependencies:
|
|
42
42
|
name: dry-validation
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0.11'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.11'
|
55
55
|
- !ruby/object:Gem::Dependency
|
@@ -72,28 +72,28 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 5.25.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 5.25.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
89
|
+
version: '13.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: '
|
96
|
+
version: '13.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -171,6 +171,7 @@ executables: []
|
|
171
171
|
extensions: []
|
172
172
|
extra_rdoc_files: []
|
173
173
|
files:
|
174
|
+
- ".circleci/config.yml"
|
174
175
|
- ".gitignore"
|
175
176
|
- ".rspec"
|
176
177
|
- CHANGELOG.md
|
@@ -185,6 +186,9 @@ files:
|
|
185
186
|
- bin/setup
|
186
187
|
- lib/pathway.rb
|
187
188
|
- lib/pathway/plugins/dry_validation.rb
|
189
|
+
- lib/pathway/plugins/dry_validation/v0_11.rb
|
190
|
+
- lib/pathway/plugins/dry_validation/v0_12.rb
|
191
|
+
- lib/pathway/plugins/dry_validation/v1_0.rb
|
188
192
|
- lib/pathway/plugins/responder.rb
|
189
193
|
- lib/pathway/plugins/sequel_models.rb
|
190
194
|
- lib/pathway/plugins/simple_auth.rb
|
@@ -221,8 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
221
225
|
- !ruby/object:Gem::Version
|
222
226
|
version: '0'
|
223
227
|
requirements: []
|
224
|
-
|
225
|
-
rubygems_version: 2.7.7
|
228
|
+
rubygems_version: 3.0.8
|
226
229
|
signing_key:
|
227
230
|
specification_version: 4
|
228
231
|
summary: Define your business logic in simple steps.
|