pathway 0.9.1 → 0.11.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 ? "were" : "was"
15
+ list.size > 1 ? 'were' : 'was'
14
16
  end
15
17
 
16
18
  def pluralize_fields
17
- @fields.size > 1 ? "fields" : "field"
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
- def rules
9
- @form.rules
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
- @not_required ||= defined - optional
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: ", ", last_connector: " and ")
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? && not_required.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
- "require #{field_list} as #{pluralize_fields}"
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
- "Expected to require #{field_list} as #{pluralize_fields} but " +
22
- [not_required_list, not_defined_list].compact.join("; and ")
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("; and ")
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
- "Did not to expected operation to be successful but it was"
34
+ 'Did not to expected operation to be successful but it was'
33
35
  end
34
36
 
35
37
  def success?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Pathway
2
- VERSION = '0.9.1'
4
+ VERSION = '0.11.3'
3
5
  end
@@ -1,4 +1,5 @@
1
- # coding: utf-8
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", "~> 0.11"
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", "~> 4.46.0"
37
- spec.add_development_dependency "rake", "~> 10.0"
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.9.1
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: 2019-02-19 00:00:00.000000000 Z
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: 4.46.0
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: 4.46.0
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: '10.0'
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: '10.0'
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
- rubyforge_project:
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.