toystore 0.8.3 → 0.9.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.
- data/.gitignore +1 -2
- data/Changelog.md +9 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +71 -0
- data/Guardfile +15 -0
- data/README.md +28 -0
- data/examples/attributes_abbreviation.rb +1 -2
- data/examples/attributes_virtual.rb +1 -2
- data/examples/identity_map.rb +7 -12
- data/examples/memcached.rb +1 -1
- data/examples/memory.rb +1 -1
- data/examples/mongo.rb +1 -1
- data/examples/redis.rb +1 -1
- data/examples/riak.rb +1 -1
- data/lib/toy.rb +40 -39
- data/lib/toy/attribute.rb +1 -6
- data/lib/toy/attributes.rb +61 -90
- data/lib/toy/caching.rb +11 -13
- data/lib/toy/callbacks.rb +12 -31
- data/lib/toy/cloneable.rb +20 -0
- data/lib/toy/collection.rb +8 -7
- data/lib/toy/dirty.rb +17 -36
- data/lib/toy/dirty_store.rb +32 -0
- data/lib/toy/equality.rb +2 -0
- data/lib/toy/extensions/boolean.rb +22 -18
- data/lib/toy/identity_map.rb +39 -62
- data/lib/toy/list.rb +23 -22
- data/lib/toy/logger.rb +2 -17
- data/lib/toy/mass_assignment_security.rb +3 -5
- data/lib/toy/middleware/identity_map.rb +23 -4
- data/lib/toy/object.rb +16 -0
- data/lib/toy/persistence.rb +72 -62
- data/lib/toy/proxies/list.rb +19 -18
- data/lib/toy/proxies/proxy.rb +7 -6
- data/lib/toy/querying.rb +2 -4
- data/lib/toy/reference.rb +28 -26
- data/lib/toy/reloadable.rb +17 -0
- data/lib/toy/serialization.rb +25 -25
- data/lib/toy/store.rb +3 -11
- data/lib/toy/validations.rb +9 -28
- data/lib/toy/version.rb +1 -1
- data/perf/reads.rb +7 -9
- data/perf/writes.rb +6 -8
- data/spec/helper.rb +3 -1
- data/spec/support/constants.rb +1 -4
- data/spec/support/identity_map_matcher.rb +5 -5
- data/spec/support/objects.rb +38 -0
- data/spec/toy/attribute_spec.rb +1 -1
- data/spec/toy/attributes_spec.rb +1 -153
- data/spec/toy/callbacks_spec.rb +1 -45
- data/spec/toy/cloneable_spec.rb +47 -0
- data/spec/toy/dirty_spec.rb +12 -44
- data/spec/toy/dirty_store_spec.rb +47 -0
- data/spec/toy/equality_spec.rb +5 -19
- data/spec/toy/extensions/boolean_spec.rb +2 -0
- data/spec/toy/identity/uuid_key_factory_spec.rb +2 -2
- data/spec/toy/identity_map_spec.rb +45 -37
- data/spec/toy/identity_spec.rb +1 -1
- data/spec/toy/inspect_spec.rb +1 -1
- data/spec/toy/lists_spec.rb +20 -5
- data/spec/toy/logger_spec.rb +1 -29
- data/spec/toy/mass_assignment_security_spec.rb +16 -5
- data/spec/toy/middleware/identity_map_spec.rb +68 -2
- data/spec/toy/persistence_spec.rb +88 -30
- data/spec/toy/reference_spec.rb +0 -1
- data/spec/toy/references_spec.rb +20 -0
- data/spec/toy/reloadable_spec.rb +81 -0
- data/spec/toy/serialization_spec.rb +1 -110
- data/spec/toy/validations_spec.rb +0 -21
- data/spec/toy_spec.rb +4 -5
- data/test/lint_test.rb +1 -1
- metadata +21 -26
- data/.autotest +0 -11
- data/LOGGING.rdoc +0 -12
- data/README.rdoc +0 -27
- data/examples/models.rb +0 -51
- data/lib/toy/dolly.rb +0 -30
- data/lib/toy/embedded_list.rb +0 -45
- data/lib/toy/embedded_lists.rb +0 -68
- data/lib/toy/index.rb +0 -74
- data/lib/toy/indices.rb +0 -56
- data/lib/toy/proxies/embedded_list.rb +0 -79
- data/spec/toy/dolly_spec.rb +0 -76
- data/spec/toy/embedded_list_spec.rb +0 -607
- data/spec/toy/embedded_lists_spec.rb +0 -172
- data/spec/toy/index_spec.rb +0 -230
- data/spec/toy/indices_spec.rb +0 -141
- data/specs.watchr +0 -52
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe Toy::Reloadable do
|
4
|
+
uses_constants('User', 'Game')
|
5
|
+
|
6
|
+
describe "#reload" do
|
7
|
+
before do
|
8
|
+
User.attribute(:name, String)
|
9
|
+
@user = User.create(:name => 'John')
|
10
|
+
end
|
11
|
+
let(:user) { @user }
|
12
|
+
|
13
|
+
it "reloads id from database" do
|
14
|
+
id = user.id
|
15
|
+
user.reload
|
16
|
+
user.id.should == id
|
17
|
+
end
|
18
|
+
|
19
|
+
it "reloads record from the database" do
|
20
|
+
user.name = 'Steve'
|
21
|
+
user.reload
|
22
|
+
user.name.should == 'John'
|
23
|
+
end
|
24
|
+
|
25
|
+
it "is still persisted" do
|
26
|
+
user.should be_persisted
|
27
|
+
user.reload
|
28
|
+
user.should be_persisted
|
29
|
+
end
|
30
|
+
|
31
|
+
it "returns the record" do
|
32
|
+
user.name = 'Steve'
|
33
|
+
user.reload.should equal(user)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "resets instance variables" do
|
37
|
+
user.instance_variable_set("@foo", true)
|
38
|
+
user.reload
|
39
|
+
user.instance_variable_get("@foo").should be_nil
|
40
|
+
end
|
41
|
+
|
42
|
+
it "resets lists" do
|
43
|
+
User.list(:games)
|
44
|
+
game = Game.create
|
45
|
+
user.update_attributes(:games => [game])
|
46
|
+
user.games = []
|
47
|
+
user.games.should == []
|
48
|
+
user.reload
|
49
|
+
user.games.should == [game]
|
50
|
+
end
|
51
|
+
|
52
|
+
it "resets references" do
|
53
|
+
Game.reference(:user)
|
54
|
+
game = Game.create(:user => user)
|
55
|
+
game.user = nil
|
56
|
+
game.user.should be_nil
|
57
|
+
game.reload
|
58
|
+
game.user.should == user
|
59
|
+
end
|
60
|
+
|
61
|
+
it "raises NotFound if does not exist" do
|
62
|
+
user.destroy
|
63
|
+
lambda { user.reload }.should raise_error(Toy::NotFound)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "reloads defaults" do
|
67
|
+
User.attribute(:skills, Array)
|
68
|
+
@user.reload
|
69
|
+
@user.skills.should == []
|
70
|
+
end
|
71
|
+
|
72
|
+
it "reloads attributes protected from mass assignment" do
|
73
|
+
User.attribute(:admin, Boolean)
|
74
|
+
User.attr_accessible(:name)
|
75
|
+
user = User.new(:name => 'John')
|
76
|
+
user.admin = true
|
77
|
+
user.save
|
78
|
+
user.reload.admin.should be_true
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
describe Toy::Serialization do
|
4
|
-
uses_constants('User', 'Game', 'Move'
|
4
|
+
uses_constants('User', 'Game', 'Move')
|
5
5
|
|
6
6
|
before do
|
7
7
|
User.attribute :name, String
|
@@ -65,57 +65,6 @@ describe Toy::Serialization do
|
|
65
65
|
ActiveSupport::JSON.decode(json)['user'].should_not have_key('id')
|
66
66
|
end
|
67
67
|
|
68
|
-
describe "serializing with embedded documents" do
|
69
|
-
before do
|
70
|
-
Game.reference(:creator, User)
|
71
|
-
|
72
|
-
Move.attribute(:index, Integer)
|
73
|
-
Move.attribute(:points, Integer)
|
74
|
-
Move.attribute(:words, Array)
|
75
|
-
|
76
|
-
Tile.attribute(:row, Integer)
|
77
|
-
Tile.attribute(:column, Integer)
|
78
|
-
Tile.attribute(:index, Integer)
|
79
|
-
|
80
|
-
Game.embedded_list(:moves)
|
81
|
-
Move.embedded_list(:tiles)
|
82
|
-
|
83
|
-
@user = User.create
|
84
|
-
@game = Game.create!(:creator => @user, :move_attributes => [
|
85
|
-
:index => 0,
|
86
|
-
:points => 15,
|
87
|
-
:tile_attributes => [
|
88
|
-
{:column => 7, :row => 7, :index => 23},
|
89
|
-
{:column => 8, :row => 7, :index => 24},
|
90
|
-
],
|
91
|
-
])
|
92
|
-
end
|
93
|
-
|
94
|
-
it "includes all embedded attributes by default" do
|
95
|
-
move = @game.moves.first
|
96
|
-
tile1 = move.tiles[0]
|
97
|
-
tile2 = move.tiles[1]
|
98
|
-
ActiveSupport::JSON.decode(@game.to_json).should == {
|
99
|
-
'game' => {
|
100
|
-
'id' => @game.id,
|
101
|
-
'creator_id' => @user.id,
|
102
|
-
'moves' => [
|
103
|
-
{
|
104
|
-
'id' => move.id,
|
105
|
-
'index' => 0,
|
106
|
-
'points' => 15,
|
107
|
-
'words' => [],
|
108
|
-
'tiles' => [
|
109
|
-
{'id' => tile1.id, 'column' => 7, 'row' => 7, 'index' => 23},
|
110
|
-
{'id' => tile2.id, 'column' => 8, 'row' => 7, 'index' => 24},
|
111
|
-
]
|
112
|
-
},
|
113
|
-
],
|
114
|
-
}
|
115
|
-
}
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
68
|
describe "serializing relationships" do
|
120
69
|
before do
|
121
70
|
User.list :games, :inverse_of => :user
|
@@ -209,30 +158,6 @@ describe Toy::Serialization do
|
|
209
158
|
end
|
210
159
|
end
|
211
160
|
|
212
|
-
describe "serializing parent relationships" do
|
213
|
-
before do
|
214
|
-
Game.embedded_list :moves
|
215
|
-
Move.parent_reference :game
|
216
|
-
end
|
217
|
-
|
218
|
-
it "should include references" do
|
219
|
-
game = Game.create
|
220
|
-
move = game.moves.create
|
221
|
-
|
222
|
-
ActiveSupport::JSON.decode(move.to_json(:include => [:game])).should == {
|
223
|
-
'move' => {
|
224
|
-
'id' => move.id,
|
225
|
-
'game' => {
|
226
|
-
'id' => game.id,
|
227
|
-
'moves' => [{
|
228
|
-
'id' => move.id
|
229
|
-
}]
|
230
|
-
}
|
231
|
-
}
|
232
|
-
}
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
161
|
describe "serializing specific attributes" do
|
237
162
|
before do
|
238
163
|
Move.attribute(:index, Integer)
|
@@ -301,40 +226,6 @@ describe Toy::Serialization do
|
|
301
226
|
end
|
302
227
|
|
303
228
|
describe "#serializable_hash" do
|
304
|
-
context "with embedded list" do
|
305
|
-
before do
|
306
|
-
Game.embedded_list :moves
|
307
|
-
Move.parent_reference :game
|
308
|
-
|
309
|
-
@game = Game.create
|
310
|
-
@move = game.moves.create
|
311
|
-
end
|
312
|
-
let(:game) { @game }
|
313
|
-
|
314
|
-
it "returns a hash the whole way through" do
|
315
|
-
game.serializable_hash.should == {
|
316
|
-
'id' => game.id,
|
317
|
-
'moves' => [
|
318
|
-
{'id' => game.moves.first.id}
|
319
|
-
]
|
320
|
-
}
|
321
|
-
end
|
322
|
-
|
323
|
-
it "allows using only with embedded" do
|
324
|
-
game.serializable_hash(:only => :moves).should == {
|
325
|
-
'moves' => [
|
326
|
-
{'id' => game.moves.first.id}
|
327
|
-
]
|
328
|
-
}
|
329
|
-
end
|
330
|
-
|
331
|
-
it "allows using except to not include embedded" do
|
332
|
-
game.serializable_hash(:except => :moves).should == {
|
333
|
-
'id' => game.id,
|
334
|
-
}
|
335
|
-
end
|
336
|
-
end
|
337
|
-
|
338
229
|
context "with method that is another toystore object" do
|
339
230
|
before do
|
340
231
|
Game.reference(:creator, User)
|
@@ -147,25 +147,4 @@ describe Toy::Validations do
|
|
147
147
|
end
|
148
148
|
end
|
149
149
|
end
|
150
|
-
|
151
|
-
describe ".validates_embedded" do
|
152
|
-
before do
|
153
|
-
Game.embedded_list(:moves)
|
154
|
-
Move.attribute(:index, Integer)
|
155
|
-
Move.validates_presence_of(:index)
|
156
|
-
Game.validates_embedded(:moves)
|
157
|
-
end
|
158
|
-
|
159
|
-
it "adds errors if any of the embedded are invalid" do
|
160
|
-
game = Game.new(:moves => [Move.new])
|
161
|
-
game.valid?
|
162
|
-
game.errors[:moves].should include('is invalid')
|
163
|
-
end
|
164
|
-
|
165
|
-
it "does not have errors if all embedded are valid" do
|
166
|
-
game = Game.new(:moves => [Move.new(:index => 1)])
|
167
|
-
game.valid?
|
168
|
-
game.errors[:moves].should_not include('is invalid')
|
169
|
-
end
|
170
|
-
end
|
171
150
|
end
|
data/spec/toy_spec.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
describe Toy do
|
4
|
-
uses_constants('User', 'Game'
|
4
|
+
uses_constants('User', 'Game')
|
5
5
|
|
6
6
|
describe ".clear" do
|
7
|
-
it "can clear all the
|
8
|
-
Game.embedded_list(:moves)
|
7
|
+
it "can clear all the adapters in one magical moment" do
|
9
8
|
user = User.create!
|
10
|
-
game = Game.create!
|
9
|
+
game = Game.create!
|
11
10
|
Toy.clear
|
12
11
|
User.get(user.id).should be_nil
|
13
12
|
Game.get(game.id).should be_nil
|
14
13
|
end
|
15
14
|
|
16
|
-
it "does not raise error when no default
|
15
|
+
it "does not raise error when no default adapter set" do
|
17
16
|
klass = Class.new { include Toy::Store }
|
18
17
|
lambda { Toy.clear }.should_not raise_error
|
19
18
|
end
|
data/test/lint_test.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: toystore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 59
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 9
|
9
|
+
- 0
|
10
|
+
version: 0.9.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Geoffrey Dagley
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-
|
19
|
+
date: 2012-03-14 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
name: adapter
|
@@ -105,19 +105,19 @@ extensions: []
|
|
105
105
|
extra_rdoc_files: []
|
106
106
|
|
107
107
|
files:
|
108
|
-
- .autotest
|
109
108
|
- .gitignore
|
109
|
+
- Changelog.md
|
110
110
|
- Gemfile
|
111
|
+
- Gemfile.lock
|
112
|
+
- Guardfile
|
111
113
|
- LICENSE
|
112
|
-
-
|
113
|
-
- README.rdoc
|
114
|
+
- README.md
|
114
115
|
- Rakefile
|
115
116
|
- examples/attributes_abbreviation.rb
|
116
117
|
- examples/attributes_virtual.rb
|
117
118
|
- examples/identity_map.rb
|
118
119
|
- examples/memcached.rb
|
119
120
|
- examples/memory.rb
|
120
|
-
- examples/models.rb
|
121
121
|
- examples/mongo.rb
|
122
122
|
- examples/namespacing_keys.rb
|
123
123
|
- examples/redis.rb
|
@@ -127,11 +127,10 @@ files:
|
|
127
127
|
- lib/toy/attributes.rb
|
128
128
|
- lib/toy/caching.rb
|
129
129
|
- lib/toy/callbacks.rb
|
130
|
+
- lib/toy/cloneable.rb
|
130
131
|
- lib/toy/collection.rb
|
131
132
|
- lib/toy/dirty.rb
|
132
|
-
- lib/toy/
|
133
|
-
- lib/toy/embedded_list.rb
|
134
|
-
- lib/toy/embedded_lists.rb
|
133
|
+
- lib/toy/dirty_store.rb
|
135
134
|
- lib/toy/equality.rb
|
136
135
|
- lib/toy/exceptions.rb
|
137
136
|
- lib/toy/extensions/array.rb
|
@@ -149,22 +148,21 @@ files:
|
|
149
148
|
- lib/toy/identity/abstract_key_factory.rb
|
150
149
|
- lib/toy/identity/uuid_key_factory.rb
|
151
150
|
- lib/toy/identity_map.rb
|
152
|
-
- lib/toy/index.rb
|
153
|
-
- lib/toy/indices.rb
|
154
151
|
- lib/toy/inspect.rb
|
155
152
|
- lib/toy/list.rb
|
156
153
|
- lib/toy/lists.rb
|
157
154
|
- lib/toy/logger.rb
|
158
155
|
- lib/toy/mass_assignment_security.rb
|
159
156
|
- lib/toy/middleware/identity_map.rb
|
157
|
+
- lib/toy/object.rb
|
160
158
|
- lib/toy/persistence.rb
|
161
159
|
- lib/toy/plugins.rb
|
162
|
-
- lib/toy/proxies/embedded_list.rb
|
163
160
|
- lib/toy/proxies/list.rb
|
164
161
|
- lib/toy/proxies/proxy.rb
|
165
162
|
- lib/toy/querying.rb
|
166
163
|
- lib/toy/reference.rb
|
167
164
|
- lib/toy/references.rb
|
165
|
+
- lib/toy/reloadable.rb
|
168
166
|
- lib/toy/serialization.rb
|
169
167
|
- lib/toy/store.rb
|
170
168
|
- lib/toy/timestamps.rb
|
@@ -178,14 +176,14 @@ files:
|
|
178
176
|
- spec/support/constants.rb
|
179
177
|
- spec/support/identity_map_matcher.rb
|
180
178
|
- spec/support/name_and_number_key_factory.rb
|
179
|
+
- spec/support/objects.rb
|
181
180
|
- spec/toy/attribute_spec.rb
|
182
181
|
- spec/toy/attributes_spec.rb
|
183
182
|
- spec/toy/caching_spec.rb
|
184
183
|
- spec/toy/callbacks_spec.rb
|
184
|
+
- spec/toy/cloneable_spec.rb
|
185
185
|
- spec/toy/dirty_spec.rb
|
186
|
-
- spec/toy/
|
187
|
-
- spec/toy/embedded_list_spec.rb
|
188
|
-
- spec/toy/embedded_lists_spec.rb
|
186
|
+
- spec/toy/dirty_store_spec.rb
|
189
187
|
- spec/toy/equality_spec.rb
|
190
188
|
- spec/toy/exceptions_spec.rb
|
191
189
|
- spec/toy/extensions/array_spec.rb
|
@@ -202,8 +200,6 @@ files:
|
|
202
200
|
- spec/toy/identity/uuid_key_factory_spec.rb
|
203
201
|
- spec/toy/identity_map_spec.rb
|
204
202
|
- spec/toy/identity_spec.rb
|
205
|
-
- spec/toy/index_spec.rb
|
206
|
-
- spec/toy/indices_spec.rb
|
207
203
|
- spec/toy/inspect_spec.rb
|
208
204
|
- spec/toy/list_spec.rb
|
209
205
|
- spec/toy/lists_spec.rb
|
@@ -215,12 +211,12 @@ files:
|
|
215
211
|
- spec/toy/querying_spec.rb
|
216
212
|
- spec/toy/reference_spec.rb
|
217
213
|
- spec/toy/references_spec.rb
|
214
|
+
- spec/toy/reloadable_spec.rb
|
218
215
|
- spec/toy/serialization_spec.rb
|
219
216
|
- spec/toy/store_spec.rb
|
220
217
|
- spec/toy/timestamps_spec.rb
|
221
218
|
- spec/toy/validations_spec.rb
|
222
219
|
- spec/toy_spec.rb
|
223
|
-
- specs.watchr
|
224
220
|
- test/lint_test.rb
|
225
221
|
- toystore.gemspec
|
226
222
|
homepage: http://github.com/newtoy/toystore
|
@@ -262,14 +258,14 @@ test_files:
|
|
262
258
|
- spec/support/constants.rb
|
263
259
|
- spec/support/identity_map_matcher.rb
|
264
260
|
- spec/support/name_and_number_key_factory.rb
|
261
|
+
- spec/support/objects.rb
|
265
262
|
- spec/toy/attribute_spec.rb
|
266
263
|
- spec/toy/attributes_spec.rb
|
267
264
|
- spec/toy/caching_spec.rb
|
268
265
|
- spec/toy/callbacks_spec.rb
|
266
|
+
- spec/toy/cloneable_spec.rb
|
269
267
|
- spec/toy/dirty_spec.rb
|
270
|
-
- spec/toy/
|
271
|
-
- spec/toy/embedded_list_spec.rb
|
272
|
-
- spec/toy/embedded_lists_spec.rb
|
268
|
+
- spec/toy/dirty_store_spec.rb
|
273
269
|
- spec/toy/equality_spec.rb
|
274
270
|
- spec/toy/exceptions_spec.rb
|
275
271
|
- spec/toy/extensions/array_spec.rb
|
@@ -286,8 +282,6 @@ test_files:
|
|
286
282
|
- spec/toy/identity/uuid_key_factory_spec.rb
|
287
283
|
- spec/toy/identity_map_spec.rb
|
288
284
|
- spec/toy/identity_spec.rb
|
289
|
-
- spec/toy/index_spec.rb
|
290
|
-
- spec/toy/indices_spec.rb
|
291
285
|
- spec/toy/inspect_spec.rb
|
292
286
|
- spec/toy/list_spec.rb
|
293
287
|
- spec/toy/lists_spec.rb
|
@@ -299,6 +293,7 @@ test_files:
|
|
299
293
|
- spec/toy/querying_spec.rb
|
300
294
|
- spec/toy/reference_spec.rb
|
301
295
|
- spec/toy/references_spec.rb
|
296
|
+
- spec/toy/reloadable_spec.rb
|
302
297
|
- spec/toy/serialization_spec.rb
|
303
298
|
- spec/toy/store_spec.rb
|
304
299
|
- spec/toy/timestamps_spec.rb
|
data/.autotest
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'autotest/growl'
|
2
|
-
|
3
|
-
Autotest.add_hook(:initialize) {|at|
|
4
|
-
at.add_exception %r{^\.git} # ignore Version Control System
|
5
|
-
at.add_exception %r{^./tmp} # ignore temp files, lest autotest will run again, and again...
|
6
|
-
# at.clear_mappings # take out the default (test/test*rb)
|
7
|
-
at.add_mapping(%r{^lib/.*\.rb$}) {|f, _|
|
8
|
-
Dir['spec/**/*.rb']
|
9
|
-
}
|
10
|
-
nil
|
11
|
-
}
|