stubberry 0.2.0 → 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 +4 -4
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +8 -2
- data/Gemfile +2 -0
- data/Rakefile +3 -1
- data/bin/console +1 -0
- data/lib/stubberry/active_record.rb +61 -67
- data/lib/stubberry/assertions.rb +11 -31
- data/lib/stubberry/object.rb +60 -58
- data/lib/stubberry/version.rb +3 -1
- data/lib/stubberry.rb +14 -0
- data/stubberry.gemspec +16 -14
- metadata +24 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee7c2b90c9dd5e32707924b85ad8e2b88d40fc3617d1404ee839227b21ebf414
|
4
|
+
data.tar.gz: 43760ddf930c7d4a3a0a582c6f705ea39d218b3e84619345785e58df68461312
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5a89ea231eb74516a8b1e3cfdad53fcb9efabc11d10cd31e5fd954441ef76ffe4caf75581b226e2cdcae7c1b09fed9cfe72cb80e10ea951e33dda15f373bc934
|
7
|
+
data.tar.gz: 6fb0d51c8f5ecf01ba4b670e4e50fb5456d63159c396166f27be21f63e793849f22a077704c2522716a510ad1168cb255d612c2fc2d633da10578789a0ea7279
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,11 @@
|
|
1
|
-
# 0.
|
1
|
+
# 0.3.0
|
2
|
+
* rubocop-shopify added as a base linter
|
3
|
+
* assertion for method called rewritten to use stub_must under the hood
|
4
|
+
* DRYied some methods to Stubberry module methods
|
5
|
+
* introduced ruby 3.0 kwargs compatible signatures
|
6
|
+
|
7
|
+
|
8
|
+
# 0.2.0
|
2
9
|
* new module with assertion methods added
|
3
10
|
* assert_method_called added, this is a flow assertion, you can check the params, and you can check that method was called inside the block,
|
4
11
|
without stubbing objects and interfering with the original flow
|
@@ -6,7 +13,6 @@
|
|
6
13
|
* singleton_classes is now properly cleared after, see PR: https://github.com/seattlerb/minitest/pull/891
|
7
14
|
* some methods got '__' prefixes, just to prevent naming collisions
|
8
15
|
|
9
|
-
|
10
16
|
|
11
17
|
# 0.1.1
|
12
18
|
* initial gem release
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# this module provide two methods for active record classes
|
2
4
|
# to easily stub any record attributes and methods disregarding the way
|
3
5
|
# record was obtained inside the yielding block, you just need an id.
|
@@ -7,90 +9,82 @@
|
|
7
9
|
# that's a very error prone approach, with stub_orm_* methods we
|
8
10
|
# do not care about the way object was obtained as long as after_find
|
9
11
|
# callback was executed
|
10
|
-
module Stubberry
|
11
|
-
|
12
|
+
module Stubberry
|
13
|
+
module ActiveRecord
|
14
|
+
extend ActiveSupport::Concern
|
12
15
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
# for any active record object for classes included Stubberry::ActiveRecord
|
17
|
+
# we adding after_find callback extending object with self.class.extend_any
|
18
|
+
# default implementation of self.class.extend_any does nothing
|
19
|
+
included do
|
20
|
+
after_find { |obj| self.class.__extend_any(obj) }
|
21
|
+
end
|
19
22
|
|
20
|
-
|
23
|
+
module ClassMethods
|
24
|
+
# This method could be used whenever there is a need for stubbing
|
25
|
+
# the exact ActiveRecord object attributes inside some execution flow
|
26
|
+
# __WITHOUT__!! underlying record change
|
27
|
+
def stub_orm_attr(id, obj_or_attributes, &block)
|
28
|
+
stub(:__extend_any, ->(obj) {
|
29
|
+
return unless obj.id == id && obj.is_a?(self)
|
21
30
|
|
22
|
-
|
23
|
-
|
24
|
-
# __WITHOUT__!! underlying record change
|
25
|
-
def stub_orm_attr(id, obj_or_attributes )
|
26
|
-
stub(:__extend_any, -> (obj) {
|
27
|
-
return unless obj.id == id && obj.is_a?( self )
|
28
|
-
obj.assign_attributes( obj_or_attributes.try(:attributes) || obj_or_attributes )
|
29
|
-
}) do
|
30
|
-
yield
|
31
|
+
obj.assign_attributes(obj_or_attributes.try(:attributes) || obj_or_attributes)
|
32
|
+
}, &block)
|
31
33
|
end
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
# This method could be used whenever there is a need for stubbing
|
36
|
+
# the specific Active Record object's methods inside some flow piece
|
37
|
+
# with ANY way of object retrieval
|
38
|
+
def stub_orm_method(id, method, val_or_callable, *block_args, **block_kwargs, &block)
|
39
|
+
stub(:__extend_any, ->(obj) {
|
40
|
+
return unless obj.id == id && obj.is_a?(self)
|
41
|
+
|
42
|
+
__define_stub_method(obj, method, val_or_callable, *block_args, **block_kwargs)
|
43
|
+
}, &block)
|
44
|
+
ensure
|
45
|
+
__revert_all_methods(id, method)
|
43
46
|
end
|
44
|
-
ensure
|
45
|
-
__revert_all_methods(id, method)
|
46
|
-
end
|
47
47
|
|
48
|
-
|
48
|
+
def __define_stub_method(object, method, val_or_callable, *block_args, **block_kwargs)
|
49
|
+
method_new_name = __stub_method_name(method, obj: object)
|
49
50
|
|
50
|
-
|
51
|
-
method_new_name = __stub_method_name(method, obj: object)
|
51
|
+
Stubberry.__define_method_mimic_replacement(object, method)
|
52
52
|
|
53
|
-
|
53
|
+
object.singleton_class.alias_method(method_new_name, method)
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
val_or_callable
|
55
|
+
object.define_singleton_method(method) do |*args, **kwargs, &blk|
|
56
|
+
if val_or_callable.respond_to?(:call)
|
57
|
+
val_or_callable.call(*args, **kwargs, &blk)
|
58
|
+
else
|
59
|
+
blk&.call(*block_args, **block_kwargs)
|
60
|
+
val_or_callable
|
61
|
+
end
|
63
62
|
end
|
63
|
+
__stubbed_objects(method_new_name) << object
|
64
64
|
end
|
65
|
-
__stubbed_objects(method_new_name) << object
|
66
|
-
end
|
67
|
-
|
68
|
-
def __define_dynamic_method_replacement( object, method )
|
69
|
-
# this means method is dynamic
|
70
|
-
return unless object.respond_to?( method ) && !object.methods.map(&:to_s).include?( method.to_s )
|
71
65
|
|
72
|
-
|
73
|
-
|
66
|
+
def __stub_method_name(method, obj: nil, id: nil)
|
67
|
+
# __stub_class_method_id
|
68
|
+
"__stub_#{self}_#{method}_#{obj&.id || id}"
|
69
|
+
end
|
74
70
|
|
75
|
-
|
76
|
-
|
77
|
-
"__stub_#{to_s}_#{method}_#{obj&.id || id}"
|
78
|
-
end
|
71
|
+
def __revert_all_methods(id, method)
|
72
|
+
method_new_name = __stub_method_name(method, id: id)
|
79
73
|
|
80
|
-
|
81
|
-
|
74
|
+
__stubbed_objects(method_new_name).map(&:singleton_class).each do |metaclass|
|
75
|
+
metaclass.send(:undef_method, method)
|
76
|
+
metaclass.send(:alias_method, method, method_new_name)
|
77
|
+
metaclass.send(:undef_method, method_new_name)
|
78
|
+
end
|
79
|
+
end
|
82
80
|
|
83
|
-
__stubbed_objects(
|
84
|
-
|
85
|
-
metaclass.send :alias_method, method, method_new_name
|
86
|
-
metaclass.send :undef_method, method_new_name
|
81
|
+
def __stubbed_objects(method_name)
|
82
|
+
(@@__extended_objects ||= {})[method_name] ||= [] # rubocop:disable Style/ClassVars
|
87
83
|
end
|
88
|
-
end
|
89
84
|
|
90
|
-
|
91
|
-
|
85
|
+
def __extend_any(_obj)
|
86
|
+
:do_nothing
|
87
|
+
end
|
92
88
|
end
|
93
|
-
|
94
|
-
def __extend_any(_obj); :do_nothing end
|
95
89
|
end
|
96
|
-
end if defined?(ActiveRecord)
|
90
|
+
end if defined?(ActiveRecord)
|
data/lib/stubberry/assertions.rb
CHANGED
@@ -1,34 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# dynamic methods should be explicitly defined
|
13
|
-
if object.respond_to?( method ) && !object.methods.map(&:to_s).include?( method.to_s )
|
14
|
-
metaclass.define_method( method ) { |*args, **kargs, &block| super(*args, **kargs, &block) }
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Stubberry
|
4
|
+
module Assertions
|
5
|
+
# controlling the flow with minimum side effects
|
6
|
+
def assert_method_called(object, method, inspect_params_callable = nil, &block)
|
7
|
+
object_unbound_method = object.method(method.to_sym).unbind
|
8
|
+
object.stub_must(method, ->(*args, **kwargs, &blk) {
|
9
|
+
inspect_params_callable&.call(*args, **kwargs)
|
10
|
+
object_unbound_method.bind(object).call(*args, **kwargs, &blk)
|
11
|
+
}, &block)
|
15
12
|
end
|
16
|
-
|
17
|
-
metaclass.alias_method base_method_new_name, method
|
18
|
-
|
19
|
-
call_happened = []
|
20
|
-
|
21
|
-
metaclass.define_method( method ) do |*args, **kargs, &blk|
|
22
|
-
inspect_params_callable.call(*args, **kargs) if inspect_params_callable
|
23
|
-
call_happened << true
|
24
|
-
send(base_method_new_name, *args, **kargs, &blk)
|
25
|
-
end
|
26
|
-
|
27
|
-
yield.tap { raise "#{method} wasn't called" if call_happened.length == 0 }
|
28
|
-
|
29
|
-
ensure
|
30
|
-
metaclass.__stbr_clear_singleton_class( method, base_method_new_name, singleton_has_stubbing_method )
|
31
13
|
end
|
32
|
-
|
33
14
|
end
|
34
|
-
|
data/lib/stubberry/object.rb
CHANGED
@@ -1,80 +1,82 @@
|
|
1
|
-
|
2
|
-
# this is an enrichment of an original stub method from the minitest/mock
|
3
|
-
def stub_must( name, val_or_callable, *block_args )
|
4
|
-
method_new_name = "__minitest_stub__#{name}"
|
1
|
+
# frozen_string_literal: true
|
5
2
|
|
6
|
-
|
3
|
+
module Stubberry
|
4
|
+
module Object
|
5
|
+
# this is an enrichment of an original stub method from the minitest/mock
|
6
|
+
def stub_must(name, val_or_callable, *block_args, **block_kwargs)
|
7
|
+
method_new_name = "__minitest_stub__#{name}"
|
7
8
|
|
8
|
-
|
9
|
-
singleton_class.define_method( name ) { |*args, **kargs, &block| super(*args, **kargs, &block) }
|
10
|
-
end
|
9
|
+
singleton_has_stubbing_method = singleton_methods.map(&:to_s).include?(name.to_s)
|
11
10
|
|
12
|
-
|
11
|
+
Stubberry.__define_method_mimic_replacement(self, name)
|
13
12
|
|
14
|
-
|
13
|
+
singleton_class.alias_method(method_new_name, name)
|
15
14
|
|
16
|
-
|
17
|
-
call_happened << true
|
15
|
+
call_happened = []
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
singleton_class.define_method(name) do |*args, **kwargs, &blk|
|
18
|
+
call_happened << true
|
19
|
+
|
20
|
+
if val_or_callable.respond_to?(:call)
|
21
|
+
val_or_callable.call(*args, **kwargs, &blk)
|
22
|
+
else
|
23
|
+
blk&.call(*block_args, **block_kwargs)
|
24
|
+
val_or_callable
|
25
|
+
end
|
24
26
|
end
|
25
|
-
end
|
26
27
|
|
27
|
-
|
28
|
-
|
28
|
+
(yield self).tap do
|
29
|
+
raise "#{name} wasn't called" if call_happened.empty?
|
30
|
+
end
|
31
|
+
ensure
|
32
|
+
singleton_class.__stbr_clear_singleton_class(name, method_new_name, singleton_has_stubbing_method)
|
29
33
|
end
|
30
|
-
ensure
|
31
|
-
singleton_class.__stbr_clear_singleton_class( name, method_new_name, singleton_has_stubbing_method )
|
32
|
-
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
35
|
+
# the reverse method of stub_must -- will raise an issue whenever method
|
36
|
+
# was called inside a stubbing block
|
37
|
+
def stub_must_not(name, message = nil)
|
38
|
+
method_new_name = "__minitest_stub__#{name}"
|
39
|
+
singleton_has_stubbing_method = singleton_methods.map(&:to_s).include?(name.to_s)
|
39
40
|
|
40
|
-
|
41
|
+
Stubberry.__define_method_mimic_replacement(self, name)
|
41
42
|
|
42
|
-
|
43
|
-
metaclass.define_method( name ) { | *args, **kargs, &block | super(*args, **kargs, &block) }
|
44
|
-
end
|
43
|
+
singleton_class.alias_method(method_new_name, name)
|
45
44
|
|
46
|
-
|
45
|
+
singleton_class.define_method(name) { |*| raise message || "#{name} was called!" }
|
47
46
|
|
48
|
-
|
47
|
+
yield self
|
48
|
+
ensure
|
49
|
+
singleton_class.__stbr_clear_singleton_class(name, method_new_name, singleton_has_stubbing_method)
|
50
|
+
end
|
49
51
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
52
|
+
# just for fun multiple stub_must in one call
|
53
|
+
def stub_must_all(name_to_var_or_callable, &block)
|
54
|
+
if name_to_var_or_callable.length == 1
|
55
|
+
stub_must(*name_to_var_or_callable.shift, &block)
|
56
|
+
else
|
57
|
+
stub_must(*name_to_var_or_callable.shift) { stub_must_all(name_to_var_or_callable, &block) }
|
58
|
+
end
|
59
|
+
end
|
54
60
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
61
|
+
# stub only if respond otherwise just execute
|
62
|
+
def stub_if_def(name, val_or_callable, *block_args, &block)
|
63
|
+
respond_to?(name) ? stub(name, val_or_callable, *block_args, &block) : yield
|
64
|
+
end
|
60
65
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
66
|
+
# stub_must only if respond otherwise just execute
|
67
|
+
def stub_must_if_def(name, val_or_callable, *block_args, &block)
|
68
|
+
# stub only if respond otherwise just execute
|
69
|
+
respond_to?(name) ? stub_must(name, val_or_callable, *block_args, &block) : yield
|
70
|
+
end
|
65
71
|
|
66
|
-
|
67
|
-
|
68
|
-
# stub only if respond otherwise just execute
|
69
|
-
respond_to?( name ) ? stub_must(name, val_or_callable, *block_args, &block) : yield
|
70
|
-
end
|
72
|
+
def __stbr_clear_singleton_class(name, new_name, had_method_before)
|
73
|
+
raise Stubberry::Error, "This is a singleton_class methods only!" unless singleton_class?
|
71
74
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
remove_method( new_name )
|
75
|
+
remove_method(name)
|
76
|
+
alias_method(name, new_name) if had_method_before
|
77
|
+
remove_method(new_name)
|
78
|
+
end
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
80
|
-
Object.include(Stubberry::Object)
|
82
|
+
Object.include(Stubberry::Object)
|
data/lib/stubberry/version.rb
CHANGED
data/lib/stubberry.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "stubberry/version"
|
2
4
|
require "stubberry/object"
|
3
5
|
require "stubberry/active_record"
|
@@ -5,4 +7,16 @@ require "stubberry/assertions"
|
|
5
7
|
|
6
8
|
module Stubberry
|
7
9
|
class Error < StandardError; end
|
10
|
+
|
11
|
+
def self.__define_method_mimic_replacement(object, method)
|
12
|
+
return unless __is_a_method_mimic?(object, method)
|
13
|
+
|
14
|
+
object.define_singleton_method(method) { |*args, **kargs, &block| super(*args, **kargs, &block) }
|
15
|
+
end
|
16
|
+
|
17
|
+
# object responds to 'method' but, the are no such method among methods,
|
18
|
+
# i.e. it's run through a method_missing
|
19
|
+
def self.__is_a_method_mimic?(object, method)
|
20
|
+
object.respond_to?(method) && !object.methods.map(&:to_s).include?(method.to_s)
|
21
|
+
end
|
8
22
|
end
|
data/stubberry.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/stubberry/version"
|
2
4
|
|
3
5
|
Gem::Specification.new do |spec|
|
4
6
|
spec.name = "stubberry"
|
@@ -6,11 +8,12 @@ Gem::Specification.new do |spec|
|
|
6
8
|
spec.authors = ["alekseyl"]
|
7
9
|
spec.email = ["leshchuk@gmail.com"]
|
8
10
|
|
9
|
-
spec.summary =
|
10
|
-
spec.description =
|
11
|
+
spec.summary = "Ultimate collection of sweet stub methods for ruby test suits. Lets stub! "
|
12
|
+
spec.description = "This a ultimate set of stub extensions. Suggest any reasonable subbing and I'll try to "\
|
13
|
+
"merge it. It will start with: stub_must, stub_must_not, stub_if_def and many more "
|
11
14
|
spec.homepage = "https://github.com/alekseyl/stubberry"
|
12
15
|
spec.license = "MIT"
|
13
|
-
spec.required_ruby_version =
|
16
|
+
spec.required_ruby_version = ">= 2.5"
|
14
17
|
|
15
18
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
16
19
|
|
@@ -20,21 +23,20 @@ Gem::Specification.new do |spec|
|
|
20
23
|
|
21
24
|
# Specify which files should be added to the gem when it is released.
|
22
25
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
23
|
-
spec.files
|
24
|
-
|
26
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
27
|
+
%x(git ls-files -z).split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
28
|
end
|
26
29
|
spec.bindir = "exe"
|
27
30
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
28
31
|
spec.require_paths = ["lib"]
|
29
32
|
|
30
|
-
spec.
|
31
|
-
spec.add_development_dependency "activerecord", ">= 6.1"
|
32
|
-
|
33
|
-
spec.add_development_dependency "bundler", ">= 1"
|
34
|
-
spec.add_development_dependency "rake", ">= 12.3.3"
|
35
|
-
spec.add_development_dependency "minitest", "~> 5.0"
|
36
|
-
spec.add_development_dependency 'sqlite3'
|
33
|
+
spec.add_development_dependency("activerecord", ">= 6.1")
|
37
34
|
|
35
|
+
spec.add_development_dependency("bundler", ">= 1")
|
36
|
+
spec.add_development_dependency("minitest", "~> 5.0")
|
37
|
+
spec.add_development_dependency("rake", ">= 12.3.3")
|
38
|
+
spec.add_development_dependency("sqlite3")
|
38
39
|
|
39
|
-
spec.add_development_dependency
|
40
|
+
spec.add_development_dependency("rubocop-shopify")
|
41
|
+
spec.add_development_dependency("ruby_jard")
|
40
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stubberry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- alekseyl
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -53,21 +67,21 @@ dependencies:
|
|
53
67
|
- !ruby/object:Gem::Version
|
54
68
|
version: 12.3.3
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: sqlite3
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
|
-
- - "
|
73
|
+
- - ">="
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
75
|
+
version: '0'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
|
-
- - "
|
80
|
+
- - ">="
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: rubocop-shopify
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|
@@ -104,6 +118,7 @@ extensions: []
|
|
104
118
|
extra_rdoc_files: []
|
105
119
|
files:
|
106
120
|
- ".gitignore"
|
121
|
+
- ".rubocop.yml"
|
107
122
|
- ".travis.yml"
|
108
123
|
- CHANGELOG.md
|
109
124
|
- CODE_OF_CONDUCT.md
|
@@ -142,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
157
|
- !ruby/object:Gem::Version
|
143
158
|
version: '0'
|
144
159
|
requirements: []
|
145
|
-
rubygems_version: 3.
|
160
|
+
rubygems_version: 3.2.15
|
146
161
|
signing_key:
|
147
162
|
specification_version: 4
|
148
163
|
summary: Ultimate collection of sweet stub methods for ruby test suits. Lets stub!
|