rspec-junklet 2.1.3 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MDQxMTliMDE4Zjk5Yjg3NmQ4OTEwYzZhYTJkMmEzZjlmMzE4Mzg2ZQ==
5
- data.tar.gz: !binary |-
6
- ZTk1ZjllMmM4ZGJhNTI1YWU1OTA0NzNlY2FiNTk2ODQxYTNiOGY2Yw==
2
+ SHA1:
3
+ metadata.gz: d86599950fe1c28302e71d4679251be2495ef794
4
+ data.tar.gz: d8696cb846ae80ed7db3658643f65160b566f6b8
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NWU0ODIxODI2MmJkOTNkNDA4YWRkYjRhZjI4ZWE4ZWUwNGVmZDc0YjI3YmRj
10
- OWQ5MmMxNDZkYmZlOGE1MTEwNDBlNmZiYzY3ZmMyNDQwOTIwM2JmZjIzM2Q4
11
- NjFkZGNjNzA0NzJhY2Y0MTllYTYzMGNhM2M3MTQzYTlmZmExN2I=
12
- data.tar.gz: !binary |-
13
- Y2M0NWIzYmM1MDc0ZTUwOGQ4MjUyNGQxNDYwYmM4NzA1ODJiN2E4OWI2NjU1
14
- M2EzMzg1OTZhNzAyYzNlMTRmMGZiZmVmZjA4NjBjZjZiODZiNzhlN2Q1ZDQw
15
- ZDRmYzZhYTQwMmZlNTkzNTE4ODY0NmViYzY5ZmVhOWU1NThmYjc=
6
+ metadata.gz: 661c26d2f4d0317fd54bb28d4b581fd5a93d892036cf5b1633fdbd8bf42bbf5853c0ad97eb0550199ce8944edac88569d6b260eabdd4ffbf8d68caf869141e80
7
+ data.tar.gz: 85287ab4a12a9c6eb013f17b65a43a7dcf75550c92c56ce241efd6a71152b1626af96e810c10f2938fb4a4b57518de541395f1cffde754e43286a582707c19ec
data/.gitignore CHANGED
@@ -32,3 +32,4 @@ build/
32
32
 
33
33
  # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
34
  .rvmrc
35
+ .byebug_history
@@ -1,12 +1,13 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rspec-junklet (2.1.3)
4
+ rspec-junklet (2.2.0)
5
5
  rspec (>= 2.0, < 4.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ byebug (9.0.6)
10
11
  coderay (1.1.0)
11
12
  diff-lcs (1.2.5)
12
13
  method_source (0.8.2)
@@ -15,14 +16,19 @@ GEM
15
16
  method_source (~> 0.8.1)
16
17
  slop (~> 3.4)
17
18
  rake (10.4.2)
18
- rspec (2.99.0)
19
- rspec-core (~> 2.99.0)
20
- rspec-expectations (~> 2.99.0)
21
- rspec-mocks (~> 2.99.0)
22
- rspec-core (2.99.2)
23
- rspec-expectations (2.99.2)
24
- diff-lcs (>= 1.1.3, < 2.0)
25
- rspec-mocks (2.99.2)
19
+ rspec (3.5.0)
20
+ rspec-core (~> 3.5.0)
21
+ rspec-expectations (~> 3.5.0)
22
+ rspec-mocks (~> 3.5.0)
23
+ rspec-core (3.5.2)
24
+ rspec-support (~> 3.5.0)
25
+ rspec-expectations (3.5.0)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.5.0)
28
+ rspec-mocks (3.5.0)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.5.0)
31
+ rspec-support (3.5.0)
26
32
  slop (3.6.0)
27
33
 
28
34
  PLATFORMS
@@ -30,6 +36,10 @@ PLATFORMS
30
36
 
31
37
  DEPENDENCIES
32
38
  bundler (~> 1.7)
39
+ byebug (~> 9.0)
33
40
  pry (~> 0.10)
34
41
  rake (~> 10.0)
35
42
  rspec-junklet!
43
+
44
+ BUNDLED WITH
45
+ 1.14.6
@@ -1,5 +1,10 @@
1
1
  module RSpec
2
2
  module Junklet
3
+ # Formatter.new(input) receives the generated junk, and #format returns the
4
+ # input already formatted. You don't have to inherit from this class; as
5
+ # long as your class accepts one argument to .new and responds to #format
6
+ # you're a formatter. Inheriting from Formatter means you already have a
7
+ # basic implementation, however.
3
8
  class Formatter
4
9
  attr_reader :input
5
10
 
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  require_relative 'formatter'
2
4
 
3
5
  module RSpec
@@ -67,14 +69,15 @@ module RSpec
67
69
  type = args.shift
68
70
  opts = args.last || {}
69
71
 
70
- excluder = if opts[:exclude]
71
- if opts[:exclude].is_a?(Proc)
72
- opts[:exclude]
73
- else
74
- ->(x) { Array(opts[:exclude]).include?(x) }
75
- end
76
- else
72
+ excluder = case opts[:exclude]
73
+ when Proc
74
+ opts[:exclude]
75
+ when Enumerator
76
+ ->(x) { opts[:exclude].include?(x) }
77
+ when nil
77
78
  ->(x) { false }
79
+ else
80
+ ->(x) { Array(opts[:exclude]).include?(x) }
78
81
  end
79
82
 
80
83
  formatter = case opts[:format]
@@ -83,11 +86,9 @@ module RSpec
83
86
  when :int
84
87
  ->(x) { x.to_i }
85
88
  when Class
86
- raise "Formatter class must implement #format method" unless
87
- opts[:format].new(0).respond_to? :format
88
89
  ->(x) { opts[:format].new(x).format }
89
90
  when String
90
- ->(x) { sprintf(opts[:format], x) }
91
+ ->(x) { sprintf(opts[:format], *Array(x)) }
91
92
  when Proc
92
93
  opts[:format]
93
94
  else
@@ -133,10 +134,10 @@ module RSpec
133
134
  end
134
135
 
135
136
  val = if repeat.zero?
136
- value(generator, formatter, excluder)
137
+ generate_junk(generator, formatter, excluder)
137
138
  else
138
139
  repeat.times.map {
139
- value(generator, formatter, excluder)
140
+ generate_junk(generator, formatter, excluder)
140
141
  }
141
142
  end
142
143
  val
@@ -153,7 +154,7 @@ module RSpec
153
154
 
154
155
  private
155
156
 
156
- def value(generator, formatter, excluder)
157
+ def generate_junk(generator, formatter, excluder)
157
158
  begin
158
159
  v = formatter.call(generator.call)
159
160
  end while excluder.call(v)
@@ -1,5 +1,5 @@
1
1
  module RSpec
2
2
  module Junklet
3
- VERSION = "2.1.3"
3
+ VERSION = "2.2.1".freeze
4
4
  end
5
5
  end
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "byebug", "~> 9.0"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
23
24
  spec.add_development_dependency "pry", "~> 0.10"
24
25
  spec.add_dependency "rspec", [">= 2.0", "< 4.0"]
@@ -1,196 +1,268 @@
1
1
  require 'spec_helper'
2
- require PROJECT_ROOT + 'lib/rspec/junklet/junk'
2
+ require PROJECT_ROOT + 'lib/rspec/junklet/junk.rb'
3
3
 
4
- class JunkSpy
5
- attr_reader :lets
6
-
7
- include ::RSpec::Junklet::Junk
4
+ RSpec.configure do |config|
5
+ config.extend(RSpec::Junklet::Junk) # This lets us say junk() in describes and contexts
6
+ config.include(RSpec::Junklet::Junk) # This lets us say junk() in describes and contexts
8
7
  end
9
8
 
10
- describe JunkSpy do
11
- let(:junk) { subject.junk }
9
+ describe ::RSpec::Junklet::Junk do
12
10
  let(:hex_regex) { /^[0-9a-f]+$/ }
13
11
 
14
- specify { expect(junk).to match(hex_regex) }
15
- specify { expect(junk.size).to eq(32) }
12
+ describe "#junk" do
13
+ it "is a hexadecimal string" do
14
+ expect(junk).to match hex_regex
15
+ end
16
+
17
+ it "defaults to 32 characters" do
18
+ expect(junk.size).to eq(32)
19
+ end
16
20
 
17
- specify "it is random each time" do
18
- expect(subject.junk).to_not eq(subject.junk)
21
+ it "is random each time" do
22
+ expect(junk).to_not eq(junk)
23
+ end
19
24
  end
20
25
 
21
26
  describe "#junk(size)" do
22
- let(:junk) { subject.junk 14 }
23
-
24
- specify { expect(junk).to match(hex_regex) }
25
- specify { expect(junk.size).to eq(14) }
27
+ it "emits exactly (size) characters" do
28
+ expect(junk(14).size).to eq 14
29
+ end
26
30
  end
27
31
 
28
- describe "#junk(type)" do
29
- context "when type is :int" do
30
- let(:junk) { subject.junk :int }
31
- specify { expect(junk).to be_kind_of(Fixnum) }
32
+ describe "#junk(:int)" do
33
+ it "generates a Fixnum" do
34
+ expect(junk(:int)).to be_a Integer
35
+ end
32
36
 
33
- context "with min or max option" do
34
- let(:junk) { subject.junk :int, min: 3, max: 5 }
35
- it "constrains the value" do
36
- expect([3,4,5]).to include(junk)
37
- end
38
- end
37
+ context "with min or max option" do
38
+ let(:val) { junk :int, min: 3, max: 5 }
39
39
 
40
- context "with size option" do
41
- let(:junk) { subject.junk :int, size: 4 }
42
- it "constrains the value" do
43
- expect((1000..9999)).to include(junk)
44
- end
40
+ it "constrains the value" do
41
+ expect(val).to be >= 3
42
+ expect(val).to be <= 5
45
43
  end
46
44
  end
47
45
 
48
- context "when type is :bool" do
49
- let(:junk) { subject.junk :bool }
46
+ context "with size option" do
47
+ let(:val) { junk :int, size: 4 }
50
48
 
51
- it "returns a boolean" do
52
- expect([false, true]).to include(junk)
49
+ it "generates a number with that many digits (no leading zeroes)" do
50
+ expect(val).to be >= 1000
51
+ expect(val).to be <= 9999
53
52
  end
54
53
  end
54
+ end
55
55
 
56
- context "when type is Array or Enumerable" do
57
- let(:junk) { subject.junk [:a, :b, 3] }
56
+ describe "junk(:bool)" do
57
+ let(:val) { junk :bool }
58
58
 
59
- specify { expect([:a, :b, 3]).to include(junk) }
59
+ it "returns a boolean" do
60
+ expect([false, true]).to include val
60
61
  end
62
+ end
61
63
 
62
- context "when type is Proc" do
63
- let(:junk) { subject.junk ->{ [1,2,3].sample } }
64
+ describe "junk(<Array>)" do
65
+ let(:options) { [:a, :b, 3] }
66
+ let(:val) { junk options }
64
67
 
65
- specify { expect([1,2,3]).to include(junk) }
68
+ it "returns an element of the collection" do
69
+ expect(options).to include val
66
70
  end
67
71
  end
68
72
 
69
- context "with exclude option" do
73
+ describe "junk(<Enumerable>)" do
74
+ let(:options) { (1..5) }
75
+ let(:val) { junk options }
76
+
77
+ it "returns an element of the collection" do
78
+ expect(options).to include val
79
+ end
80
+
81
+ it "calls #.to_a on the Enumerable" do
82
+ # This expectation is included to document that this happens, and could
83
+ # potentially cause a memory problem. Don't do junk (1..1_000_000_000_000)
84
+ # unless you're all done with having memory.
85
+ expect(options).to receive(:to_a).and_call_original
86
+ expect(options).to include val
87
+ end
88
+ end
89
+
90
+ describe "junk(<Proc>)" do
91
+ let(:lambda) { ->{ [1,2,3].sample } }
92
+ let(:val) { junk lambda }
93
+
94
+ it "evaluates the proc" do
95
+ expect(lambda).to receive(:call).and_call_original
96
+ expect([1,2,3]).to include val
97
+ end
98
+ end
99
+
100
+ describe "exclude option" do
101
+ let(:even_numbers) { [0,2,4,6,8,10] }
102
+ let(:odd_numbers) { [1,3,5,7,9] }
103
+
70
104
  context "when excluding an item" do
71
- let(:junk) { subject.junk :int, max: 1, exclude: 1 }
105
+ let(:val) { junk :bool, exclude: true }
72
106
 
73
- specify { expect(junk).to eq(0) }
107
+ it "excludes the item" do
108
+ expect(val).to be false
109
+ end
74
110
  end
75
111
 
76
- context "when excluding an array" do
77
- let(:junk) { subject.junk :int, max: 10, exclude: [1,3,5,7,9] }
112
+ context "when excluding a list" do
113
+ let(:val) { junk :int, max: 10, exclude: odd_numbers }
78
114
 
79
- specify { expect([0,2,4,6,8,10]).to include(junk) }
115
+ it "excludes all of the items" do
116
+ expect(val).to be_in even_numbers
117
+ end
80
118
  end
81
119
 
82
- context "when excluding an enumerable" do
83
- let(:junk) { subject.junk :int, max: 10, exclude: 1.step(10, 2) }
120
+ context "when excluding an enumerator" do
121
+ let(:odd_enum) { 1.step(9, 2) }
122
+ let(:val) { junk :int, max: 10, exclude: odd_enum }
123
+
124
+ it "excludes the elements of the enumerable" do
125
+ expect(val).to be_in even_numbers
126
+ end
84
127
 
85
- specify { expect([0,2,4,6,8,10]).to include(junk) }
128
+ it "does not call #.to_a on the enumerable to get the complete list" do
129
+ expect(odd_enum).to_not receive(:to_a)
130
+ expect(val).to be_in even_numbers
131
+ end
132
+
133
+ it "calls #include? on the enumerable to determine rejection" do
134
+ expect(odd_enum).to receive(:include?).at_least(:once).and_call_original
135
+ expect(val).to be_in even_numbers
136
+ end
86
137
  end
87
138
 
88
139
  context "when excluding a Proc" do
89
- let(:junk) { subject.junk :int, max: 10, exclude: ->(x) { x%2==1 } }
90
- specify { expect([0,2,4,6,8,10]).to include(junk) }
140
+ let(:generator) { [1,3,5,6].to_enum }
141
+ let(:generator_proc) { -> { generator.next } }
142
+ let(:odd_excluder_proc) { ->(x) { x % 2 == 1 } }
143
+ let(:val) { junk generator_proc, exclude: odd_excluder_proc }
144
+
145
+ it "excludes the candidate if the proc returns true" do
146
+ expect(val).to eq 6
147
+ end
148
+
149
+ it "passes the junk candidates to the proc" do
150
+ expect(odd_excluder_proc).to receive(:call).with(1).and_call_original # rejected
151
+ expect(odd_excluder_proc).to receive(:call).with(3).and_call_original # rejected
152
+ expect(odd_excluder_proc).to receive(:call).with(5).and_call_original # rejected
153
+ expect(odd_excluder_proc).to receive(:call).with(6).and_call_original # accepted
154
+ expect(val).to eq 6
155
+ end
91
156
  end
92
157
  end
93
158
 
94
- context "with format option" do
159
+ describe "format option" do
95
160
  context "when format is :string" do
96
- let(:junk) { subject.junk :int, max: 0, format: :string }
161
+ it "returns the junk cast to a string" do
162
+ expect(junk [42], format: :string).to eq "42"
163
+ end
164
+
165
+ let(:item) { double }
166
+ let(:generator) { [item] }
167
+ let(:val) { junk generator, format: :string }
97
168
 
98
- specify { expect(junk).to eq("0") }
169
+ it "sends #to_s to the junk to convert it" do
170
+ expect(item).to receive(:to_s).and_return "42"
171
+ expect(val).to eq "42"
172
+ end
99
173
  end
100
174
 
175
+ # Why is this even here, it never gets used...
101
176
  context "when format is :int" do
102
- let(:junk) { subject.junk ["42"], format: :int }
177
+ it "returns the junk cast to an integer" do
178
+ expect(junk ["42"], format: :int).to eq 42
179
+ end
103
180
 
104
- specify { expect(junk).to be_kind_of(Integer) }
105
- specify { expect(junk).to eq(42) }
181
+ let(:item) { double }
182
+ let(:generator) { [item] }
183
+ let(:val) { junk generator, format: :int }
184
+
185
+ it "sends #to_i to the junk to convert it" do
186
+ expect(item).to receive(:to_i).and_return 42
187
+ expect(val).to eq 42
188
+ end
106
189
  end
107
190
 
108
- context "when format is a format string" do
109
- let(:junk) { subject.junk [15], format: "0x%02x" }
191
+ context "when format is a sprintf-style format string" do
192
+ let(:binary_string) { junk :int, format: "%b" }
110
193
 
111
- it "formats the value by the string" do
112
- expect(junk).to eq("0x0f")
194
+ it "formats the generated junk with the format string" do
195
+ expect(binary_string).to match /^[01]+$/
113
196
  end
114
- end
115
197
 
116
- context "when format is a Junklet::Formatter" do
117
- class HexTripler < RSpec::Junklet::Formatter
118
- def value
119
- input * 3
198
+ context "when generator emits an array" do
199
+ let(:generator) { ->{ [2017, 1, 9] } }
200
+ let(:val) { junk generator, format: "%d-%02d-%02d" }
201
+
202
+ it "passes all of the array elements to the format string" do
203
+ expect(val).to eq "2017-01-09"
120
204
  end
205
+ end
206
+ end
121
207
 
208
+ context "when fromat is a custom Junklet::Formatter class" do
209
+ # By inheriting from Formatter, we get new(input) for free
210
+ class HexTripler < RSpec::Junklet::Formatter
122
211
  def format
123
- "0x%02x" % value
212
+ "0x%02x" % (input * 3)
124
213
  end
125
214
  end
126
215
 
127
- let(:junk) { subject.junk [4], format: HexTripler }
216
+ let(:val) { junk [14], format: HexTripler }
128
217
 
129
- it "delegates to #format" do
130
- expect(junk).to be_kind_of(String)
131
- expect(junk).to eq("0x0c")
218
+ it "passes junk to new and calls format" do
219
+ expect(val).to eq "0x2a"
132
220
  end
133
221
  end
134
222
 
135
- context "when format is a class that quacks like Junklet::Formatter" do
223
+ context "when format is a any class that implements .new(junk) and #format" do
136
224
  class HexDoubler
137
225
  def initialize(input)
138
226
  @n = input
139
227
  end
140
228
 
141
- def value
142
- @n * 2
143
- end
144
-
145
229
  def format
146
- "0x%04x" % value
230
+ "0x%02x" % (@n * 2)
147
231
  end
148
232
  end
149
233
 
150
- let(:junk) { subject.junk [12], format: HexDoubler }
234
+ let(:val) { junk [14], format: HexDoubler }
151
235
 
152
- it "works as expected" do
153
- expect(junk).to be_kind_of(String)
154
- expect(junk).to eq("0x0018")
236
+ it "passes junk to new and calls format" do
237
+ expect(val).to eq "0x1c"
155
238
  end
156
239
  end
157
240
 
158
- context "but does not implement #value" do
159
- class BadDoublerNoFormat
160
- def initialize(input)
161
- end
241
+ context "when format is a Proc" do
242
+ let(:val) { junk [14], format: ->(x) { x.to_s(2) } }
162
243
 
163
- def value
164
- end
244
+ it "formats the junk through the proc" do
245
+ expect(val).to eq "1110"
165
246
  end
166
247
 
167
- let(:junk) { subject.junk [2], format: BadDoublerNoFormat }
168
-
169
- specify { expect { junk }.to raise_error("Formatter class must implement #format method") }
170
- end
248
+ context "when generator emits an array" do
249
+ let(:generator) { ->{ [2017, 1, 9] } }
250
+ let(:val) { junk generator, format: ->(x) { "%d-%02d-%02d" % x } }
171
251
 
172
-
173
- # BUG: this special case of format does not work:
174
- # doubled_string = junk 6, format: ->(x) { x * 2 })
175
- # expect(doubled_string.size).to eq(12) # nope, it's 6
176
- # junk 6, format: ->(x) { x.upcase } # also returns x unmodified
177
-
178
- context "when format is a Proc" do
179
- let(:junk) { subject.junk [3], format: ->(x) { x * 3 } }
180
-
181
- it "calls proc on junk value" do
182
- expect(junk).to eq(9)
252
+ it "passes all of the array elements to the format string" do
253
+ expect(val).to eq "2017-01-09"
254
+ end
183
255
  end
184
256
  end
257
+ end
185
258
 
186
- context "when format and exclude are used together" do
187
- let(:truth) { subject.junk :bool, format: :string, exclude: "false" }
188
- let(:lies) { subject.junk :bool, format: :string, exclude: truth }
259
+ describe "format and exclude used together" do
260
+ let(:truth) { junk :bool, format: :string, exclude: "false" }
261
+ let(:lies) { junk :bool, format: :string, exclude: truth }
189
262
 
190
- specify "it just works" do
191
- expect(truth).to eq("true")
192
- expect(lies).to eq("false")
193
- end
263
+ it "applies exclusion after formatting" do
264
+ expect(truth).to eq("true")
265
+ expect(lies).to eq("false")
194
266
  end
195
267
  end
196
268
  end
@@ -1,40 +1,39 @@
1
1
  require PROJECT_ROOT + 'lib/rspec/junklet/junklet'
2
2
 
3
- class JunkletSpy
4
- attr_reader :lets
3
+ RSpec.configure do |config|
4
+ config.extend(RSpec::Junklet::Junklet) # This lets us say junklet() in describes and contexts
5
+ end
5
6
 
6
- include ::RSpec::Junklet::Junklet
7
+ describe '.junklet' do
8
+ junklet :pigs, :cows
7
9
 
8
- def let(*args)
9
- @lets = args
10
+ it "generates a let" do
11
+ expect(pigs).to be
12
+ expect(cows).to be
10
13
  end
11
14
 
12
- def junk
13
- 'junkety_junky_junk'
15
+ it "prefixes the let with its own name" do
16
+ expect(pigs).to match /^pigs_/
17
+ expect(cows).to match /^cows_/
14
18
  end
15
- end
16
19
 
17
- describe JunkletSpy do
18
- specify { expect(subject).to respond_to(:junklet) }
20
+ it "appends 32 hex characters of random noise to make it unique" do
21
+ expect(pigs).to match /^pigs_[0-9a-f]{32}$/
22
+ expect(cows).to match /^cows_[0-9a-f]{32}$/
23
+ end
19
24
 
20
- describe '.junklet' do
21
- it 'delegates named junklets to let' do
22
- expect(subject).to receive(:let).with(:pigs)
23
- expect(subject).to receive(:let).with(:cows)
24
- subject.junklet :pigs, :cows
25
- end
25
+ describe "separator option" do
26
+ junklet :pigtruck, separator: '~'
26
27
 
27
- it 'delegates junk generation to junk' do
28
- expect(subject).to receive(:make_junklet).with(:pig_truck, 'pig_truck', '_')
29
- expect(subject).to receive(:make_junklet).with(:cow_truck, 'cow_truck', '_')
30
- subject.junklet :pig_truck, :cow_truck
28
+ it 'uses separator instead of underscore' do
29
+ expect(pigtruck).to match /^pigtruck~/
31
30
  end
32
31
 
33
- context "with separator" do
34
- it 'converts separator in name' do
35
- expect(subject).to receive(:make_junklet).with(:pig_truck, 'pig~truck', '~')
36
- expect(subject).to receive(:make_junklet).with(:cow_truck, 'cow~truck', '~')
37
- subject.junklet :pig_truck, :cow_truck, separator: '~'
32
+ context "when junklet has underscores in its name" do
33
+ junklet :http_get_param, separator: '-'
34
+
35
+ it 'replaces underscores in junklet name as well' do
36
+ expect(http_get_param).to match /^http-get-param-/
38
37
  end
39
38
  end
40
39
  end
@@ -6,6 +6,7 @@ require_relative PROJECT_ROOT + "lib" + "rspec" + "junklet"
6
6
 
7
7
 
8
8
  require "pry"
9
+ require "byebug"
9
10
 
10
11
  # Since we've kept rigidly to 80-columns, we can easily
11
12
  # Do a pretty side-by-side diff here. This won't handle
@@ -46,3 +47,39 @@ def dump_diff(expected_lines, got_lines)
46
47
  end
47
48
  dump_footer
48
49
  end
50
+
51
+ # be_in - working inverse of #cover and #include, e.g.
52
+ #
53
+ # let(:range) { (1..5) }
54
+ # let(:list) { [1,2,3,4,5] }
55
+ # let(:val) { 3 }
56
+ #
57
+ # specify { expect(range).to cover val }
58
+ # specify { expect(val).to be_in range }
59
+ # specify { expect(list).to include val }
60
+ # specify { expect(val).to be_in list }
61
+ #
62
+ # Why? Because sometimes I think reading order is important. For example, if the
63
+ # options for a command can vary and we want to assert that they contain a known
64
+ # correct value, I prefer
65
+ #
66
+ # specify { expect(options).to include value }
67
+ #
68
+ # As it is the options that are in question here. But if the list of known
69
+ # options is fixed, and the code under test returns a value that we want to
70
+ # prove is inside the list of known options, I prefer
71
+ #
72
+ # specify { expect(value).to be_in options }
73
+ #
74
+ # ...and yes, I frequently put an #in? method on Object that takes a collection,
75
+ # and simply calls collection.include?(self) internally. Again just because
76
+ # reading order.
77
+ RSpec::Matchers.define :be_in do |list|
78
+ match do |element|
79
+ list.include? element
80
+ end
81
+ end
82
+
83
+ gem_root = File.expand_path(File.join(File.dirname(__FILE__), ".."))
84
+
85
+ Dir[File.join(gem_root, 'spec/support/**/*.rb')].each { |f| require f }
@@ -0,0 +1,10 @@
1
+ def banner(*objects, &_block)
2
+ puts '-' * 80
3
+ if !objects.empty?
4
+ objects.each do |object|
5
+ puts object
6
+ end
7
+ end
8
+ yield if block_given?
9
+ puts '-' * 80
10
+ end
metadata CHANGED
@@ -1,75 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec-junklet
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Brady
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-05 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: byebug
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '9.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '9.0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ~>
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
47
  version: '10.0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ~>
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
54
  version: '10.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: pry
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
61
  version: '0.10'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0.10'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ! '>='
73
+ - - ">="
60
74
  - !ruby/object:Gem::Version
61
75
  version: '2.0'
62
- - - <
76
+ - - "<"
63
77
  - !ruby/object:Gem::Version
64
78
  version: '4.0'
65
79
  type: :runtime
66
80
  prerelease: false
67
81
  version_requirements: !ruby/object:Gem::Requirement
68
82
  requirements:
69
- - - ! '>='
83
+ - - ">="
70
84
  - !ruby/object:Gem::Version
71
85
  version: '2.0'
72
- - - <
86
+ - - "<"
73
87
  - !ruby/object:Gem::Version
74
88
  version: '4.0'
75
89
  description: Works like let for rspec, but creates unique random junk data
@@ -79,9 +93,8 @@ executables: []
79
93
  extensions: []
80
94
  extra_rdoc_files: []
81
95
  files:
82
- - .gitignore
83
- - .rspec
84
- - .ruby-version
96
+ - ".gitignore"
97
+ - ".rspec"
85
98
  - Gemfile
86
99
  - Gemfile.lock
87
100
  - LICENSE
@@ -106,6 +119,7 @@ files:
106
119
  - spec/lib/rspec/junklet/junk_spec.rb
107
120
  - spec/lib/rspec/junklet/junklet_spec.rb
108
121
  - spec/spec_helper.rb
122
+ - spec/support/banner.rb
109
123
  homepage: https://github.com/dbrady/rspec-junklet
110
124
  licenses:
111
125
  - MIT
@@ -116,17 +130,17 @@ require_paths:
116
130
  - lib
117
131
  required_ruby_version: !ruby/object:Gem::Requirement
118
132
  requirements:
119
- - - ! '>='
133
+ - - ">="
120
134
  - !ruby/object:Gem::Version
121
135
  version: '0'
122
136
  required_rubygems_version: !ruby/object:Gem::Requirement
123
137
  requirements:
124
- - - ! '>='
138
+ - - ">="
125
139
  - !ruby/object:Gem::Version
126
140
  version: '0'
127
141
  requirements: []
128
142
  rubyforge_project:
129
- rubygems_version: 2.4.5
143
+ rubygems_version: 2.5.1
130
144
  signing_key:
131
145
  specification_version: 4
132
146
  summary: Easily create junk data for specs
@@ -145,3 +159,4 @@ test_files:
145
159
  - spec/lib/rspec/junklet/junk_spec.rb
146
160
  - spec/lib/rspec/junklet/junklet_spec.rb
147
161
  - spec/spec_helper.rb
162
+ - spec/support/banner.rb
@@ -1 +0,0 @@
1
- ruby-1.9.3-p551