pathway 0.9.0 → 0.11.2
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 +23 -1
- data/Gemfile +0 -2
- data/README.md +97 -56
- 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 +33 -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 +11 -5
- metadata +17 -12
@@ -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"
|
@@ -11,9 +12,14 @@ Gem::Specification.new do |spec|
|
|
11
12
|
|
12
13
|
spec.summary = %q{Define your business logic in simple steps.}
|
13
14
|
spec.description = %q{Define your business logic in simple steps.}
|
14
|
-
|
15
|
+
spec.homepage = "https://github.com/pabloh/pathway"
|
15
16
|
spec.license = "MIT"
|
16
17
|
|
18
|
+
spec.metadata = {
|
19
|
+
"bug_tracker_uri" => "https://github.com/pabloh/pathway/issues",
|
20
|
+
"source_code_uri" => "https://github.com/pabloh/pathway",
|
21
|
+
}
|
22
|
+
|
17
23
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
24
|
f.match(%r{^(test|spec|features)/})
|
19
25
|
end
|
@@ -26,10 +32,10 @@ Gem::Specification.new do |spec|
|
|
26
32
|
spec.add_dependency "dry-inflector", ">= 0.1.0"
|
27
33
|
spec.add_dependency "contextualizer", "~> 0.0.4"
|
28
34
|
|
29
|
-
spec.add_development_dependency "dry-validation", "
|
35
|
+
spec.add_development_dependency "dry-validation", ">= 0.11"
|
30
36
|
spec.add_development_dependency "bundler", ">= 1.14.0"
|
31
|
-
spec.add_development_dependency "sequel", "~>
|
32
|
-
spec.add_development_dependency "rake", "~>
|
37
|
+
spec.add_development_dependency "sequel", "~> 5.25.0"
|
38
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
33
39
|
spec.add_development_dependency "rspec", "~> 3.0"
|
34
40
|
spec.add_development_dependency "coveralls"
|
35
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.2
|
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
|
@@ -200,10 +204,12 @@ files:
|
|
200
204
|
- lib/pathway/rspec/matchers/succeed_on.rb
|
201
205
|
- lib/pathway/version.rb
|
202
206
|
- pathway.gemspec
|
203
|
-
homepage:
|
207
|
+
homepage: https://github.com/pabloh/pathway
|
204
208
|
licenses:
|
205
209
|
- MIT
|
206
|
-
metadata:
|
210
|
+
metadata:
|
211
|
+
bug_tracker_uri: https://github.com/pabloh/pathway/issues
|
212
|
+
source_code_uri: https://github.com/pabloh/pathway
|
207
213
|
post_install_message:
|
208
214
|
rdoc_options: []
|
209
215
|
require_paths:
|
@@ -219,8 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
219
225
|
- !ruby/object:Gem::Version
|
220
226
|
version: '0'
|
221
227
|
requirements: []
|
222
|
-
|
223
|
-
rubygems_version: 2.7.7
|
228
|
+
rubygems_version: 3.0.8
|
224
229
|
signing_key:
|
225
230
|
specification_version: 4
|
226
231
|
summary: Define your business logic in simple steps.
|