rspec-forward 0.1.5 → 0.3.0

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: cd8ed2ce0a3d5bdac14a3391dcadcfeb9f2a3adfe84b8e54b0f45c2d499d4858
4
- data.tar.gz: ac84a53d06fca6bd1ad011ef967d0f314e21d8fa71155a6452c7c8b21ef0fe88
3
+ metadata.gz: 408b6bb845882bb291901c4cdd81bdc6c0f22b90f9a28f76992e22a83c4b1c63
4
+ data.tar.gz: 82a3952da4f7b3debb6759afbc0fd37340405fde5d59a3059b081d83224e9493
5
5
  SHA512:
6
- metadata.gz: 4f779b3c1eec8e2732a8af0a45ee34baf4dbd9a83f1c7acbbcf8a1d1d84f15ededae37235ccc244becc9332c2acd1c65c2d0914a3f9f0543a02b3394b6d8a730
7
- data.tar.gz: fef5b0306011c86b72065d9a76af420e1eb47178016fb5ccebb73c69d1375bf55730669021fc6fe757a7a834af73b804541ff4567805a3760a965bd33fab5710
6
+ metadata.gz: 98481a93f0e7770547c370b49d5635b0e4be146ea9b292139ca4eb692e202c1b0778410c213af863da8770d6e194aabd5212107c2c6b30061255a6e0f060ac67
7
+ data.tar.gz: 403eef097334f5796c461e8bca0ad792b00e22d65d8a7484a88bab5209b59ca228fa150f8c22d4459685d1a5be93d4d16fdcf057455d7b242e56c04ccfbac4bb
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.0.0
1
+ 3.1.2
data/Gemfile CHANGED
@@ -3,5 +3,5 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in rspec-forward.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
6
+ gem "rake"
7
7
  gem "rspec", "~> 3.0"
data/Gemfile.lock CHANGED
@@ -1,23 +1,23 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-forward (0.1.5)
5
- rspec-mocks (~> 3.10)
4
+ rspec-forward (0.3.0)
5
+ rspec-mocks (~> 3.9)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
10
  coderay (1.1.3)
11
- diff-lcs (1.4.4)
12
- ffi (1.15.3)
13
- formatador (0.3.0)
14
- guard (2.17.0)
11
+ diff-lcs (1.5.0)
12
+ ffi (1.15.5)
13
+ formatador (1.1.0)
14
+ guard (2.18.0)
15
15
  formatador (>= 0.2.4)
16
16
  listen (>= 2.7, < 4.0)
17
17
  lumberjack (>= 1.0.12, < 2.0)
18
18
  nenv (~> 0.1)
19
19
  notiffany (~> 0.0)
20
- pry (>= 0.9.12)
20
+ pry (>= 0.13.0)
21
21
  shellany (~> 0.0)
22
22
  thor (>= 0.18.1)
23
23
  guard-compat (1.2.1)
@@ -25,7 +25,7 @@ GEM
25
25
  guard (~> 2.1)
26
26
  guard-compat (~> 1.1)
27
27
  rspec (>= 2.99.0, < 4.0)
28
- listen (3.5.1)
28
+ listen (3.7.1)
29
29
  rb-fsevent (~> 0.10, >= 0.10.3)
30
30
  rb-inotify (~> 0.9, >= 0.9.10)
31
31
  lumberjack (1.2.8)
@@ -37,25 +37,25 @@ GEM
37
37
  pry (0.14.1)
38
38
  coderay (~> 1.1)
39
39
  method_source (~> 1.0)
40
- rake (12.3.3)
41
- rb-fsevent (0.11.0)
40
+ rake (13.0.6)
41
+ rb-fsevent (0.11.1)
42
42
  rb-inotify (0.10.1)
43
43
  ffi (~> 1.0)
44
- rspec (3.10.0)
45
- rspec-core (~> 3.10.0)
46
- rspec-expectations (~> 3.10.0)
47
- rspec-mocks (~> 3.10.0)
48
- rspec-core (3.10.1)
49
- rspec-support (~> 3.10.0)
50
- rspec-expectations (3.10.1)
44
+ rspec (3.11.0)
45
+ rspec-core (~> 3.11.0)
46
+ rspec-expectations (~> 3.11.0)
47
+ rspec-mocks (~> 3.11.0)
48
+ rspec-core (3.11.0)
49
+ rspec-support (~> 3.11.0)
50
+ rspec-expectations (3.11.0)
51
51
  diff-lcs (>= 1.2.0, < 2.0)
52
- rspec-support (~> 3.10.0)
53
- rspec-mocks (3.10.2)
52
+ rspec-support (~> 3.11.0)
53
+ rspec-mocks (3.11.1)
54
54
  diff-lcs (>= 1.2.0, < 2.0)
55
- rspec-support (~> 3.10.0)
56
- rspec-support (3.10.2)
55
+ rspec-support (~> 3.11.0)
56
+ rspec-support (3.11.0)
57
57
  shellany (0.0.1)
58
- thor (1.1.0)
58
+ thor (1.2.1)
59
59
 
60
60
  PLATFORMS
61
61
  ruby
@@ -63,9 +63,9 @@ PLATFORMS
63
63
  DEPENDENCIES
64
64
  guard (~> 2.16)
65
65
  guard-rspec (~> 4.7)
66
- rake (~> 12.0)
66
+ rake
67
67
  rspec (~> 3.0)
68
68
  rspec-forward!
69
69
 
70
70
  BUNDLED WITH
71
- 2.2.3
71
+ 2.3.20
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2021 Aleksander Długopolski
3
+ Copyright (c) 2022 Marz Drel
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -0,0 +1,21 @@
1
+ module ::RSpec
2
+ module Forward
3
+ module CoreExtensions
4
+ refine String do
5
+ def camelize(uppercase_first_letter = true)
6
+ string = self
7
+
8
+ if uppercase_first_letter
9
+ string = string.sub(/^[a-z\d]*/, &:capitalize)
10
+ else
11
+ string = string.sub(/^(?:(?=\b|[A-Z_])|\w)/, &:downcase)
12
+ end
13
+
14
+ string
15
+ .gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
16
+ .gsub("/", "::")
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -12,7 +12,8 @@ module ::RSpec
12
12
 
13
13
  define_method name do |*kwargs|
14
14
  @args = Array.new(index, :arg)
15
- @kwargs = Hash[kwargs.map { [_1, _1] }]
15
+ @kwargs = Hash[kwargs.map { |name| [name, name] }]
16
+
16
17
  self
17
18
  end
18
19
  end
@@ -22,7 +23,11 @@ module ::RSpec
22
23
  end
23
24
 
24
25
  def with_1_arg_and_named(*args, **kwargs)
25
- with_1_args_and_named(*args, **kwargs)
26
+ if kwargs.empty?
27
+ with_1_args_and_named(*args)
28
+ else
29
+ with_1_args_and_named(*args, **kwargs)
30
+ end
26
31
  end
27
32
 
28
33
  def with_no_args
@@ -37,7 +42,7 @@ module ::RSpec
37
42
 
38
43
  def with_named(*kwargs)
39
44
  @args = []
40
- @kwargs = Hash[kwargs.map { [_1, _1] }]
45
+ @kwargs = Hash[kwargs.map { |name| [name, name] }]
41
46
  self
42
47
  end
43
48
 
@@ -73,16 +78,29 @@ module ::RSpec
73
78
  def matches_for?(actual, return_value)
74
79
  assign_actual(actual)
75
80
 
76
- allow(@actual)
77
- .to receive(:new)
78
- .with(*exp_args, **@kwargs)
79
- .and_return(instance)
81
+ if @kwargs.any?
82
+ allow(@actual)
83
+ .to receive(:new)
84
+ .with(*exp_args, **@kwargs)
85
+ .and_return(instance)
80
86
 
81
- result = @actual.send(@expected, *@args, **@kwargs) == return_value
87
+ result = @actual.send(@expected, *@args, **@kwargs) == return_value
82
88
 
83
- expect(@actual)
84
- .to have_received(:new)
85
- .with(*exp_args, **@kwargs)
89
+ expect(@actual)
90
+ .to have_received(:new)
91
+ .with(*exp_args, **@kwargs)
92
+ else
93
+ allow(@actual)
94
+ .to receive(:new)
95
+ .with(*exp_args)
96
+ .and_return(instance)
97
+
98
+ result = @actual.send(@expected, *@args) == return_value
99
+
100
+ expect(@actual)
101
+ .to have_received(:new)
102
+ .with(*exp_args)
103
+ end
86
104
 
87
105
  result
88
106
  end
@@ -0,0 +1,67 @@
1
+ module ::RSpec
2
+ module Forward
3
+ module ForwardScopeMethods
4
+ using CoreExtensions
5
+
6
+ def exp_args(actual)
7
+ return [actual, *@args] if @with_parent_arg
8
+ return [no_args] if @args.size.zero? && @kwargs.size.zero?
9
+
10
+ @args
11
+ end
12
+
13
+ def matches_for?(actual)
14
+ method_name = @expected
15
+ base_klass = format("%<method>s_scope", method: method_name.to_s).camelize
16
+ @scope_klass_name ||= format("%s::%s", actual.to_s, base_klass)
17
+
18
+
19
+ begin
20
+ @scope_klass = Object.const_get(@scope_klass_name)
21
+ rescue NameError => e
22
+ failure_scope_klass_name_not_defined(@scope_klass_name)
23
+ return false
24
+ end
25
+
26
+ allow(@scope_klass)
27
+ .to receive(@target_method_name)
28
+ .and_return(:result)
29
+
30
+ if @kwargs.any?
31
+ result = actual.public_send(method_name, *@args, **@kwargs) == :result
32
+
33
+ expect(@scope_klass)
34
+ .to have_received(@target_method_name)
35
+ .with(*exp_args(actual), **@kwargs)
36
+ else
37
+ result = actual.public_send(method_name, *@args) == :result
38
+
39
+ expect(@scope_klass)
40
+ .to have_received(@target_method_name)
41
+ .with(*exp_args(actual))
42
+ end
43
+
44
+ result
45
+ end
46
+
47
+ def failure_scope_klass_name_not_defined(name)
48
+ @failure_message = "#{name} should be defined"
49
+ @failure_message_when_negated = "#{name} should be defined"
50
+ end
51
+
52
+ def failure_message
53
+ @failure_message ||
54
+ %Q(expected "#{@target}.call" to be invoked)
55
+ end
56
+
57
+ def failure_message_when_negated
58
+ @failure_message_when_negated ||
59
+ %Q(expected "#{@target}.call" not to be invoked)
60
+ end
61
+
62
+ def self.included(base)
63
+ private :matches_for?
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,32 @@
1
+ module ::RSpec
2
+ module Forward
3
+ module ForwardScopeParentMethods
4
+ using CoreExtensions
5
+
6
+ def using_method(target_method_name)
7
+ @target_method_name = target_method_name
8
+ self
9
+ end
10
+
11
+ def using_class_name(target_class_name)
12
+ @scope_klass_name = target_class_name
13
+ self
14
+ end
15
+
16
+ def using_method_args(*args, **kwargs)
17
+ @args = args
18
+ @kwargs = kwargs
19
+ self
20
+ end
21
+
22
+ def with_parent_arg
23
+ # Name of the parent class is not available here if the default
24
+ # class is used, because defaualt class needs the "actual"
25
+ # parameter from matchers_for?(actual)
26
+
27
+ @with_parent_arg = true
28
+ self
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,27 @@
1
+ module ::RSpec
2
+ module Forward
3
+ class ForwardToScope
4
+ include ForwardScopeMethods
5
+ include ForwardScopeParentMethods
6
+ include Mocks::ExampleMethods
7
+
8
+ def initialize(expected)
9
+ @expected = expected
10
+ @kwargs ||= {}
11
+ @args ||= []
12
+ @target_method_name ||= :call
13
+ end
14
+
15
+ def matches?(actual)
16
+ matches_for?(actual)
17
+ end
18
+
19
+ def description
20
+ <<~TXT.gsub(/\n+/, " ")
21
+ to pass the arguments to the constructor of instance and return
22
+ the value returned by the instance method
23
+ TXT
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module Forward
3
- VERSION = "0.1.5"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
data/lib/rspec/forward.rb CHANGED
@@ -1,9 +1,13 @@
1
1
  require "rspec"
2
2
  require "rspec/mocks"
3
3
  require "rspec/forward/version"
4
+ require "rspec/forward/core_extensions"
4
5
  require "rspec/forward/forward_methods"
6
+ require "rspec/forward/forward_scope_methods"
7
+ require "rspec/forward/forward_scope_parent_methods"
5
8
  require "rspec/forward/forward_to_instance"
6
9
  require "rspec/forward/forward_to_instance_build"
10
+ require "rspec/forward/forward_to_scope"
7
11
 
8
12
  module RSpec
9
13
  module Forward
@@ -16,6 +20,10 @@ module RSpec
16
20
  def forward_to_instance_build(expected)
17
21
  ForwardToInstanceBuild.new(expected)
18
22
  end
23
+
24
+ def forward_to_scope(expected)
25
+ ForwardToScope.new(expected)
26
+ end
19
27
  end
20
28
  end
21
29
 
@@ -40,7 +40,7 @@ Gem::Specification.new do |spec|
40
40
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
41
41
  spec.require_paths = ["lib"]
42
42
 
43
- spec.add_runtime_dependency "rspec-mocks", "~> 3.10"
43
+ spec.add_runtime_dependency "rspec-mocks", "~> 3.9"
44
44
  spec.add_development_dependency "guard", "~> 2.16"
45
45
  spec.add_development_dependency "guard-rspec", "~> 4.7"
46
46
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-forward
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marz Drel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-06-25 00:00:00.000000000 Z
11
+ date: 2022-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec-mocks
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.10'
19
+ version: '3.9'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.10'
26
+ version: '3.9'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: guard
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -73,9 +73,13 @@ files:
73
73
  - bin/console
74
74
  - bin/setup
75
75
  - lib/rspec/forward.rb
76
+ - lib/rspec/forward/core_extensions.rb
76
77
  - lib/rspec/forward/forward_methods.rb
78
+ - lib/rspec/forward/forward_scope_methods.rb
79
+ - lib/rspec/forward/forward_scope_parent_methods.rb
77
80
  - lib/rspec/forward/forward_to_instance.rb
78
81
  - lib/rspec/forward/forward_to_instance_build.rb
82
+ - lib/rspec/forward/forward_to_scope.rb
79
83
  - lib/rspec/forward/version.rb
80
84
  - rspec-forward.gemspec
81
85
  homepage:
@@ -99,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
99
103
  - !ruby/object:Gem::Version
100
104
  version: '0'
101
105
  requirements: []
102
- rubygems_version: 3.2.3
106
+ rubygems_version: 3.3.7
103
107
  signing_key:
104
108
  specification_version: 4
105
109
  summary: Set of RSpec matchers for checking class method to instance method forwarding.