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.
@@ -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.0'
4
+ VERSION = '0.11.2'
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"
@@ -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
- #spec.homepage = "TODO: Put your gem's website or public repo URL here."
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", "~> 0.11"
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", "~> 4.46.0"
32
- spec.add_development_dependency "rake", "~> 10.0"
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.9.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: 2019-02-04 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
@@ -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
- rubyforge_project:
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.