much-stub 0.1.6 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6dc9e4397c7c270a2678eac9f4761adb80bdd842e6708417844855639c6acfa
4
- data.tar.gz: 57f89b55ddaf3b17a2444f7bbd40d2e8f9b1ad3046d1634021412f8847df605b
3
+ metadata.gz: 4887423991f0a75b904ee6509aba48b42fc38e29917a273f15d63a839b37447f
4
+ data.tar.gz: 2cb8b33d23ed1b1ecd392edd48ecf39a3e100dfbb717e8f8be9a046882b06904
5
5
  SHA512:
6
- metadata.gz: b57f84be1092bba24dfd51ace398e8116941a16e17f8698436158309305672e55076b46bb4b5695763c97530f7cbfce6f974de6b331432336d7b0aad8a2ecfe0
7
- data.tar.gz: 4705afaee215d93ed0a998949dd70dd2d13f03aa5fac9a31093940be16799ad43b2878df7870a046b79a1a4e2c9625bb0f5195896c371c24728600445c18c55a
6
+ metadata.gz: 1ba31f8668fbff8601a7ff632067c8e67a5b071fce5df440cf29231b569abca9b98f88c1c2c1578fde4527249d4f7e156be1c1c2f249cc2a659e25aed1cb14a3
7
+ data.tar.gz: fac22cf5adabf21a7ea87032cd3b8ed6337ad57dacca019a30053798248b265a2e06935863f81a09f729687b265c38a4c976cfa01c6b4a358a5f73e312cb1332
data/.l.yml ADDED
@@ -0,0 +1,8 @@
1
+ # https://github.com/redding/l.rb
2
+
3
+ linters:
4
+ - name: "Rubocop"
5
+ cmd: "bundle exec rubocop"
6
+ extensions:
7
+ - ".rb"
8
+ cli_abbrev: "u"
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ inherit_gem:
2
+ much-style-guide:
3
+ - "lib/much-style-guide/rubocop.yml"
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.0.2
data/.t.yml ADDED
@@ -0,0 +1,6 @@
1
+ # https://github.com/redding/t.rb
2
+
3
+ default_cmd: bundle exec assert
4
+ test_dir: test
5
+ test_file_suffixes:
6
+ - "_tests.rb"
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
- ruby "~> 2.5"
5
+ ruby ">= 2.5"
4
6
 
5
7
  gemspec
6
8
 
data/README.md CHANGED
@@ -16,15 +16,16 @@ Note: this was originally implemented in and extracted from [Assert](https://git
16
16
  ```ruby
17
17
  # Given this object/API
18
18
 
19
- my_class = Class.new do
20
- def my_method
21
- "my-method"
19
+ my_class =
20
+ Class.new do
21
+ def my_method
22
+ "my-method"
23
+ end
24
+
25
+ def my_value(value)
26
+ value
27
+ end
22
28
  end
23
-
24
- def my_value(value)
25
- value
26
- end
27
- end
28
29
  my_object = my_class.new
29
30
 
30
31
  my_object.my_method
@@ -95,15 +96,16 @@ my_object.my_value(456)
95
96
  ```ruby
96
97
  # Given this object/API
97
98
 
98
- my_class = Class.new do
99
- def basic_method(value)
100
- value
101
- end
99
+ my_class =
100
+ Class.new do
101
+ def basic_method(value)
102
+ value
103
+ end
102
104
 
103
- def iterator_method(items, &block)
104
- items.each(&block)
105
+ def iterator_method(items, &block)
106
+ items.each(&block)
107
+ end
105
108
  end
106
- end
107
109
  my_object = my_class.new
108
110
 
109
111
  # Store method call arguments/blocks for spying.
@@ -189,11 +191,12 @@ basic_method_calls.first.args
189
191
  ```ruby
190
192
  # Given this object/API ...
191
193
 
192
- my_class = Class.new do
193
- def build_thing(thing_value);
194
- Thing.new(value)
194
+ my_class =
195
+ Class.new do
196
+ def build_thing(thing_value);
197
+ Thing.new(value)
198
+ end
195
199
  end
196
- end
197
200
  my_object = my_class.new
198
201
 
199
202
  # ... and this Test Double.
@@ -223,11 +226,12 @@ Use the `.tap` method to spy on method calls while preserving the original metho
223
226
  ```ruby
224
227
  # Given this object/API
225
228
 
226
- my_class = Class.new do
227
- def basic_method(value)
228
- value.to_s
229
+ my_class =
230
+ Class.new do
231
+ def basic_method(value)
232
+ value.to_s
233
+ end
229
234
  end
230
- end
231
235
  my_object = my_class.new
232
236
 
233
237
  # Normal stubs override the original behavior and return value...
@@ -275,11 +279,12 @@ class Thing
275
279
  end
276
280
  end
277
281
 
278
- my_class = Class.new do
279
- def thing(value)
280
- Thing.new(value)
282
+ my_class =
283
+ Class.new do
284
+ def thing(value)
285
+ Thing.new(value)
286
+ end
281
287
  end
282
- end
283
288
  my_object = my_class.new
284
289
 
285
290
  # Use `MuchStub.tap` to stub any thing instances created by `my_object.thing`
@@ -306,16 +311,16 @@ Use the `.spy` method to spy on method calls. This is especially helpful for spy
306
311
  ```ruby
307
312
  # Given this object/API
308
313
 
309
- myclass = Class.new do
310
- def one; self; end
311
- def two(val); self; end
312
- def three; self; end
313
- def ready?; false; end
314
- end
314
+ myclass =
315
+ Class.new do
316
+ def one; self; end
317
+ def two(val); self; end
318
+ def three; self; end
319
+ def ready?; false; end
320
+ end
315
321
  myobj = myclass.new
316
322
 
317
- spy =
318
- MuchStub.spy(myobj :one, :two, :three, ready?: true)
323
+ spy = MuchStub.spy(myobj :one, :two, :three, ready?: true)
319
324
 
320
325
  assert_equal spy, myobj.one
321
326
  assert_equal spy, myobj.two("a")
@@ -6,14 +6,14 @@ module MuchStub
6
6
  class CallSpy < ::BasicObject
7
7
  METHOD_NAME_REPLACEMENTS = {
8
8
  "!" => "_bang",
9
- "?" => "_predicate"
9
+ "?" => "_predicate",
10
10
  }.freeze
11
11
 
12
12
  def initialize(**return_values)
13
- @call_spy_return_values = return_values.transform_keys{ |key| key.to_s }
14
- @call_spy_method_calls = ::Hash.new { |hash, key| hash[key] = [] }
13
+ @call_spy_return_values = return_values.transform_keys(&:to_s)
14
+ @call_spy_method_calls = ::Hash.new{ |hash, key| hash[key] = [] }
15
15
  @call_spy_method_return_values =
16
- ::Hash.new { |hash, key| hash[key] = call_spy_return_value_proc(key) }
16
+ ::Hash.new{ |hash, key| hash[key] = call_spy_return_value_proc(key) }
17
17
  end
18
18
 
19
19
  def call_spy_tap
@@ -22,23 +22,23 @@ module MuchStub
22
22
  end
23
23
 
24
24
  def ==(other)
25
- self.equal?(other)
25
+ equal?(other)
26
26
  end
27
27
 
28
28
  def ===(other)
29
- self.equal?(other)
29
+ equal?(other)
30
30
  end
31
31
 
32
32
  def eql?(other)
33
- self.equal?(other)
33
+ equal?(other)
34
34
  end
35
35
 
36
36
  def equal?(other)
37
- self.__id__ == other.__id__
37
+ __id__ == other.__id__
38
38
  end
39
39
 
40
40
  def hash
41
- self.__id__
41
+ __id__
42
42
  end
43
43
 
44
44
  def respond_to?(*)
@@ -46,7 +46,7 @@ module MuchStub
46
46
  end
47
47
 
48
48
  def inspect
49
- "#<MuchStub::CallSpy:#{"0x0%x" % (self.__id__ << 1)}>"
49
+ "#<MuchStub::CallSpy:#{"0x0%x" % (__id__ << 1)}>"
50
50
  end
51
51
 
52
52
  private
@@ -56,14 +56,14 @@ module MuchStub
56
56
  end
57
57
 
58
58
  def call_spy_return_value_proc(method_name)
59
- value = @call_spy_return_values.fetch(method_name, ::Proc.new { self })
60
- value.respond_to?(:call) ? value : ::Proc.new { value }
59
+ value = @call_spy_return_values.fetch(method_name, ::Proc.new{ self })
60
+ value.respond_to?(:call) ? value : ::Proc.new{ value }
61
61
  end
62
62
 
63
63
  def call_spy_normalize_method_name(name)
64
- METHOD_NAME_REPLACEMENTS.reduce(name.to_s) { |acc, (source, replacement)|
64
+ METHOD_NAME_REPLACEMENTS.reduce(name.to_s) do |acc, (source, replacement)|
65
65
  acc.gsub(source, replacement)
66
- }
66
+ end
67
67
  end
68
68
 
69
69
  def call_spy_define_spied_method(name)
@@ -79,7 +79,9 @@ module MuchStub
79
79
  spied_method_name = query_method_match[1]
80
80
  query_method_suffix = query_method_match[2]
81
81
  method_name = call_spy_normalize_method_name(spied_method_name)
82
- call_spy_define_metaclass_method("#{method_name}#{query_method_suffix}") do
82
+ call_spy_define_metaclass_method(
83
+ "#{method_name}#{query_method_suffix}",
84
+ ) do
83
85
  yield(method_name) if ::Kernel.block_given?
84
86
  end
85
87
  end
@@ -89,36 +91,35 @@ module MuchStub
89
91
  metaclass.define_method(name, &block)
90
92
  end
91
93
 
94
+ def respond_to_missing?(_name, *_args)
95
+ false
96
+ end
97
+
92
98
  def method_missing(name, *args, &block)
93
99
  if (match = name.match(/(\w+)(_calls)\z/))
94
100
  call_spy_define_query_method(match) do |method_name|
95
101
  @call_spy_method_calls[method_name]
96
102
  end
97
- self.__send__(name, *args, &block)
98
103
  elsif (match = name.match(/(\w+)(_last_called_with)\z/))
99
104
  call_spy_define_query_method(match) do |method_name|
100
- self.__send__("#{method_name}_calls").last
105
+ __send__("#{method_name}_calls").last
101
106
  end
102
- self.__send__(name, *args, &block)
103
107
  elsif (match = name.match(/(\w+)(_called_with)\z/))
104
108
  call_spy_define_query_method(match) do |method_name|
105
- self.__send__("#{method_name}_last_called_with")
109
+ __send__("#{method_name}_last_called_with")
106
110
  end
107
- self.__send__(name, *args, &block)
108
111
  elsif (match = name.match(/(\w+)(_call_count)\z/))
109
112
  call_spy_define_query_method(match) do |method_name|
110
- self.__send__("#{method_name}_calls").size
113
+ __send__("#{method_name}_calls").size
111
114
  end
112
- self.__send__(name, *args, &block)
113
115
  elsif (match = name.match(/(\w+)(_called\?)\z/))
114
116
  call_spy_define_query_method(match) do |method_name|
115
- self.__send__("#{method_name}_call_count") > 0
117
+ __send__("#{method_name}_call_count") > 0
116
118
  end
117
- self.__send__(name, *args, &block)
118
119
  else
119
120
  call_spy_define_spied_method(name)
120
- self.__send__(name, *args, &block)
121
121
  end
122
+ __send__(name, *args, &block)
122
123
  end
123
124
  end
124
125
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MuchStub
4
- VERSION = "0.1.6"
4
+ VERSION = "0.1.10"
5
5
  end
data/lib/much-stub.rb CHANGED
@@ -15,66 +15,70 @@ module MuchStub
15
15
  end
16
16
 
17
17
  def self.arity_matches?(method, args)
18
- return true if method.arity == args.size # mandatory args
19
- return true if method.arity < 0 && args.size >= (method.arity+1).abs # variable args
20
- return false
18
+ # mandatory args
19
+ return true if method.arity == args.size
20
+ # variable args
21
+ return true if method.arity < 0 && args.size >= (method.arity + 1).abs
22
+
23
+ false
21
24
  end
22
25
 
23
26
  def self.stub(obj, meth, &block)
24
- key = self.stub_key(obj, meth)
25
- self.stubs[key] ||= MuchStub::Stub.new(obj, meth, caller_locations)
26
- self.stubs[key].tap{ |s| s.do = block }
27
+ key = stub_key(obj, meth)
28
+ stubs[key] ||= MuchStub::Stub.new(obj, meth, caller_locations)
29
+ stubs[key].tap{ |s| s.do = block }
27
30
  end
28
31
 
29
32
  def self.call(*args, &block)
30
- self.stub(*args, &block)
33
+ stub(*args, &block)
31
34
  end
32
35
 
33
36
  def self.stub_on_call(*args, &on_call_block)
34
- self.stub(*args).on_call(&on_call_block)
37
+ stub(*args).on_call(&on_call_block)
35
38
  end
36
39
 
37
40
  def self.on_call(*args, &on_call_block)
38
- self.stub_on_call(*args, &on_call_block)
41
+ stub_on_call(*args, &on_call_block)
39
42
  end
40
43
 
41
44
  def self.unstub(obj, meth)
42
- key = self.stub_key(obj, meth)
43
- (self.stubs.delete(key) || MuchStub::NullStub.new).teardown
45
+ key = stub_key(obj, meth)
46
+ (stubs.delete(key) || MuchStub::NullStub.new).teardown
44
47
  end
45
48
 
46
49
  def self.unstub!
47
- self.stubs.keys.each{ |key| self.stubs.delete(key).teardown }
50
+ stubs.keys.each{ |key| stubs.delete(key).teardown }
48
51
  end
49
52
 
50
- def self.stub_send(obj, meth, *args, &block)
53
+ def self.stub_send(obj, meth, *pargs, **kargs, &block)
51
54
  orig_caller = caller_locations
52
- stub = self.stubs.fetch(MuchStub::Stub.key(obj, meth)) do
53
- raise NotStubbedError, "`#{meth}` not stubbed.", orig_caller.map(&:to_s)
54
- end
55
- stub.call_method(args, &block)
55
+ stub =
56
+ stubs.fetch(MuchStub::Stub.key(obj, meth)) do
57
+ raise NotStubbedError, "`#{meth}` not stubbed.", orig_caller.map(&:to_s)
58
+ end
59
+ stub.call_method(*pargs, **kargs, &block)
56
60
  end
57
61
 
58
62
  def self.tap(obj, meth, &tap_block)
59
- self.stub(obj, meth) { |*args, &block|
60
- self.stub_send(obj, meth, *args, &block).tap { |value|
61
- tap_block.call(value, *args, &block) if tap_block
62
- }
63
- }
63
+ stub(obj, meth) do |*pargs, **kargs, &block|
64
+ stub_send(obj, meth, *pargs, **kargs, &block).tap do |value|
65
+ tap_block&.call(value, *pargs, **kargs, &block)
66
+ end
67
+ end
64
68
  end
65
69
 
66
70
  def self.tap_on_call(obj, meth, &on_call_block)
67
- self.tap(obj, meth) { |value, *args, &block|
68
- on_call_block.call(value, MuchStub::Call.new(*args, &block)) if on_call_block
69
- }
71
+ tap(obj, meth) do |value, *pargs, **kargs, &block|
72
+ on_call_block&.call(value, MuchStub::Call.new(*pargs, **kargs, &block))
73
+ end
70
74
  end
71
75
 
72
76
  def self.spy(obj, *meths, **return_values)
73
77
  MuchStub::CallSpy.new(**return_values).call_spy_tap do |spy|
74
78
  meths.each do |meth|
75
- self.stub(obj, meth) { |*args, &block|
76
- spy.__send__(meth, *args, &block)
77
- }
79
+ stub(obj, meth) do |*pargs, **kargs, &block|
80
+ spy.__send__(meth, *pargs, **kargs, &block)
81
+ end
78
82
  end
79
83
  end
80
84
  end
@@ -104,35 +108,41 @@ module MuchStub
104
108
  @do = block || @do
105
109
  end
106
110
 
107
- def call_method(args, &block)
108
- @method.call(*args, &block)
111
+ def call_method(*pargs, **kargs, &block)
112
+ @method.call(*pargs, **kargs, &block)
109
113
  end
110
114
 
111
- def call(args, orig_caller = nil, &block)
115
+ def call(*pargs, orig_caller: nil, **kargs, &block)
112
116
  orig_caller ||= caller_locations
117
+ args = combined_args(pargs, kargs)
113
118
  unless MuchStub.arity_matches?(@method, args)
114
119
  raise(
115
120
  StubArityError.new(
116
121
  @method,
117
122
  args,
118
123
  method_name: @method_name,
119
- backtrace: orig_caller))
124
+ backtrace: orig_caller,
125
+ ),
126
+ )
120
127
  end
121
- lookup(args, orig_caller).call(*args, &block)
128
+ lookup(pargs, kargs, orig_caller).call(*pargs, **kargs, &block)
122
129
  rescue NotStubbedError
123
130
  @lookup.rehash
124
- lookup(args, orig_caller).call(*args, &block)
131
+ lookup(pargs, kargs, orig_caller).call(*pargs, **kargs, &block)
125
132
  end
126
133
 
127
- def with(*args, &block)
134
+ def with(*pargs, **kargs, &block)
128
135
  orig_caller = caller_locations
136
+ args = combined_args(pargs, kargs)
129
137
  unless MuchStub.arity_matches?(@method, args)
130
138
  raise(
131
139
  StubArityError.new(
132
140
  @method,
133
141
  args,
134
142
  method_name: @method_name,
135
- backtrace: orig_caller))
143
+ backtrace: orig_caller,
144
+ ),
145
+ )
136
146
  end
137
147
  @lookup[args] = block
138
148
  self
@@ -140,12 +150,12 @@ module MuchStub
140
150
 
141
151
  def on_call(&on_call_block)
142
152
  stub_block =
143
- ->(*args, &block) {
144
- on_call_block.call(MuchStub::Call.new(*args, &block)) if on_call_block
153
+ ->(*pargs, **kargs, &block){
154
+ on_call_block&.call(MuchStub::Call.new(*pargs, **kargs, &block))
145
155
  }
146
156
  if @lookup.empty?
147
157
  @do = stub_block
148
- elsif @lookup.has_value?(nil)
158
+ elsif @lookup.value?(nil)
149
159
  @lookup.transform_values!{ |value| value.nil? ? stub_block : value }
150
160
  end
151
161
  self
@@ -159,7 +169,7 @@ module MuchStub
159
169
  end
160
170
 
161
171
  def inspect
162
- "#<#{self.class}:#{"0x0%x" % (object_id << 1)}" \
172
+ "#<#{self.class}:#{format("0x0%x", (object_id << 1))}" \
163
173
  " @method_name=#{@method_name.inspect}" \
164
174
  ">"
165
175
  end
@@ -171,7 +181,7 @@ module MuchStub
171
181
  msg = "#{object.inspect} does not respond to `#{@method_name}`"
172
182
  raise StubError, msg, orig_caller.map(&:to_s)
173
183
  end
174
- is_constant = object.kind_of?(Module)
184
+ is_constant = object.is_a?(Module)
175
185
  local_object_methods = object.methods(false).map(&:to_s)
176
186
  all_object_methods = object.methods.map(&:to_s)
177
187
  if (is_constant && !local_object_methods.include?(@method_name)) ||
@@ -182,33 +192,39 @@ module MuchStub
182
192
  method
183
193
  end
184
194
 
185
- if !local_object_methods.include?(@name) # already stubbed
195
+ # already stubbed
196
+ unless local_object_methods.include?(@name)
186
197
  @metaclass.send(:alias_method, @name, @method_name)
187
198
  end
188
199
  @method = object.method(@name)
189
200
 
190
201
  MuchStub.instance_variable_set(@ivar_name, self)
191
202
  @metaclass.class_eval <<-stub_method
192
- def #{@method_name}(*args, &block)
193
- MuchStub.instance_variable_get("#{@ivar_name}").call(args, caller_locations, &block)
203
+ def #{@method_name}(*pargs, **kargs, &block)
204
+ MuchStub
205
+ .instance_variable_get("#{@ivar_name}")
206
+ .call(*pargs, orig_caller: caller_locations, **kargs, &block)
194
207
  end
195
208
  stub_method
196
209
  end
197
210
 
198
- def lookup(args, orig_caller)
199
- @lookup.fetch(args) {
200
- self.do || begin
211
+ def lookup(pargs, kargs, orig_caller)
212
+ args = combined_args(pargs, kargs)
213
+ @lookup.fetch(args) do
214
+ self.do ||
215
+ begin
201
216
  msg = "#{inspect_call(args)} not stubbed."
202
217
  inspect_lookup_stubs.tap do |stubs|
203
- msg += "\nStubs:\n#{stubs}" if !stubs.empty?
218
+ msg += "\nStubs:\n#{stubs}" unless stubs.empty?
204
219
  end
205
220
  raise NotStubbedError, msg, orig_caller.map(&:to_s)
206
221
  end
207
- } ||
208
- raise(
209
- StubError,
210
- "#{inspect_call(args)} stubbed with no block.",
211
- orig_caller.map(&:to_s))
222
+ end ||
223
+ raise(
224
+ StubError,
225
+ "#{inspect_call(args)} stubbed with no block.",
226
+ orig_caller.map(&:to_s),
227
+ )
212
228
  end
213
229
 
214
230
  def inspect_lookup_stubs
@@ -218,6 +234,10 @@ module MuchStub
218
234
  def inspect_call(args)
219
235
  "`#{@method_name}(#{args.map(&:inspect).join(",")})`"
220
236
  end
237
+
238
+ def combined_args(pargs, kargs)
239
+ pargs + [(kargs.empty? ? nil : kargs)].compact
240
+ end
221
241
  end
222
242
 
223
243
  StubError = Class.new(ArgumentError)
@@ -244,9 +264,12 @@ module MuchStub
244
264
  end
245
265
  end
246
266
 
247
- NullStub = Class.new do
248
- def teardown; end # no-op
249
- end
267
+ NullStub =
268
+ Class.new do
269
+ def teardown
270
+ # no-op
271
+ end
272
+ end
250
273
 
251
274
  module ParameterList
252
275
  LETTERS = ("a".."z").to_a.freeze
@@ -254,13 +277,11 @@ module MuchStub
254
277
  def self.new(object, method_name)
255
278
  arity = get_arity(object, method_name)
256
279
  params = build_params_from_arity(arity)
257
- params << "*args" if arity < 0
280
+ params << "*pargs, **kargs" if arity < 0
258
281
  params << "&block"
259
282
  params.join(", ")
260
283
  end
261
284
 
262
- private
263
-
264
285
  def self.get_arity(object, method_name)
265
286
  object.method(method_name).arity
266
287
  rescue NameError
data/much-stub.gemspec CHANGED
@@ -1,24 +1,32 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ # frozen_string_literal: true
3
+
2
4
  lib = File.expand_path("../lib", __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require "much-stub/version"
5
7
 
6
8
  Gem::Specification.new do |gem|
7
- gem.name = "much-stub"
8
- gem.version = MuchStub::VERSION
9
- gem.authors = ["Kelly Redding", "Collin Redding"]
10
- gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
11
- gem.summary = "Stubbing API for replacing method calls on objects in test runs."
12
- gem.description = "Stubbing API for replacing method calls on objects in test runs."
13
- gem.homepage = "https://github.com/redding/much-stub"
14
- gem.license = "MIT"
15
-
16
- gem.files = `git ls-files`.split($/)
9
+ gem.name = "much-stub"
10
+ gem.version = MuchStub::VERSION
11
+ gem.authors = ["Kelly Redding", "Collin Redding"]
12
+ gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
13
+
14
+ gem.summary =
15
+ "Stubbing API for replacing method calls on objects in test runs."
16
+ gem.description =
17
+ "Stubbing API for replacing method calls on objects in test runs."
18
+
19
+ gem.homepage = "https://github.com/redding/much-stub"
20
+ gem.license = "MIT"
21
+
22
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
23
+
17
24
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
25
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
19
26
  gem.require_paths = ["lib"]
20
27
 
21
- gem.required_ruby_version = "~> 2.5"
28
+ gem.required_ruby_version = ">= 2.5"
22
29
 
23
- gem.add_development_dependency("assert", ["~> 2.19.0"])
30
+ gem.add_development_dependency("assert", ["~> 2.19.7"])
31
+ gem.add_development_dependency("much-style-guide", ["~> 0.6.7"])
24
32
  end
data/test/helper.rb CHANGED
@@ -14,7 +14,7 @@ require "test/support/factory"
14
14
  # 1.8.7 backfills
15
15
 
16
16
  # Array#sample
17
- if !(a = Array.new).respond_to?(:sample) && a.respond_to?(:choice)
17
+ if !(a = []).respond_to?(:sample) && a.respond_to?(:choice)
18
18
  class Array
19
19
  alias_method :sample, :choice
20
20
  end