fixture_builder 0.5.1.rc4 → 0.5.1

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
  SHA1:
3
- metadata.gz: 0ed3bdfdd32cd95b0878b2a7ea90eacdfa46cdf7
4
- data.tar.gz: 56e24ea07566286466c783700a09ec9fa7943820
3
+ metadata.gz: 499d1a3d06e5d9732242c5ad93180428b5096c0f
4
+ data.tar.gz: 314a0687affb10304071948600b16be784b86522
5
5
  SHA512:
6
- metadata.gz: b33ccb8d31f502d85944d020a24bbda7ce2333ac35d105ea54002e5956583072ac794eb9fec4fba46c5ec6fe7ea7bc8aface513b20d8ec30a838b93114a5745e
7
- data.tar.gz: 314ada2063d1523ec3b055c9dc34d9c597a4e57e6757c3af3ebec2b1d356205ad2d5e727186b694349d20ad10fa235756dc7de6087901eecb43c9d84eb1e1655
6
+ metadata.gz: eb6dba58db8919c5505aab4e195dc1a9893f8694b5f890769f9181a3f2029b9445d49c903684f6b4e416db0dc628bdde78d8164b303c4353e9f26f739ed52324
7
+ data.tar.gz: 15bd4e3b6cb7a7500637ed77e0e5822be2d90b0207b13b21bd76a54127c089e282cd847ae50c857421fa6dd24faf3072341b9c6545a3123d4ebb23b4c57bbe29
@@ -9,23 +9,32 @@ shared across all your tests and development environment.
9
9
 
10
10
  The best of all worlds!
11
11
 
12
- * Speed: Leverage the high-performance speed of Rails' transactional tests/fixtures to avoid test suite slowdown
12
+ * **Speed**: Leverage the high-performance speed of Rails' transactional tests/fixtures to avoid test suite slowdown
13
13
  as your app's number of tests grows, because [creating and persisting data is slow!](https://robots.thoughtbot.com/speed-up-tests-by-selectively-avoiding-factory-girl)
14
- * Maintainability/reuse/abstraction: Use object mother factories to generate fixtures via
14
+ * **Maintainability/Reuse/Abstraction**: Use object mother factories to generate fixtures via
15
15
  FactoryGirl or your favorite tool
16
- * Flexibility: You can always fall back to object mothers in tests if needed, or load a fixture
16
+ * **Flexibility**: You can always fall back to object mothers in tests if needed, or load a fixture
17
17
  and modify only an attribute or two without the overhead of creating an entire object dependency graph.
18
- * Consistency: Use the exact same fixture data in all environments: test, development, and demo/staging servers.
18
+ * **Consistency**: Use the exact same fixture data in all environments: test, development, and demo/staging servers.
19
19
  Makes reproduction and acceptance testing of bugs/features faster and easier!
20
- * Simplicity: Avoid having to maintain and generate `seeds.rb` sample data set separately from your test fixture/factory data set,
20
+ * **Simplicity**: Avoid having to maintain and generate `seeds.rb` sample data set separately from your test fixture/factory data set,
21
21
  or [pick which of the myriad seeds helper gems to use](https://rubygems.org/search?query=seed). *Just delete
22
22
  `seeds.rb` and forget about it!*
23
23
 
24
24
  Installing
25
25
  ==========
26
26
 
27
- 1. Install as a plugin or gem: `gem install fixture_builder`
28
- 1. Create a file which configures and declares your fixtures (see below for example)
27
+ 1. Install:
28
+ * Directly: `gem install fixture_builder`
29
+ * Bundler:
30
+
31
+ ```ruby
32
+ # Gemfile
33
+ group :development, :test do
34
+ gem 'fixture_builder'
35
+
36
+ ```
37
+ 1. Create a file which configures and declares your fixtures (see below for examples)
29
38
  1. Require the above file in your `spec_helper.rb` or `test_helper.rb`
30
39
  1. If you are using rspec, ensure you have
31
40
  * Set the `FIXTURES_PATH` in `config/application.rb` (not test.rb, or you can't use `rake db:fixtures:load`). E.g.:
@@ -52,10 +61,10 @@ Usage
52
61
 
53
62
  * When running tests/specs, fixtures will build/rebuild automatically as needed
54
63
  * `rake spec:fixture_builder:build` to force a build of fixtures
55
- * `rake spec:fixture_builder:rebuild` to force a rebuild of fixtures
64
+ * `rake spec:fixture_builder:clean` to delete all existing fixture files
65
+ * `rake spec:fixture_builder:rebuild` to force a rebuild of fixtures (just a clean + build)
56
66
  * `rake db:fixtures:load` to load built fixtures into your development environment (this is a standard Rails rake task)
57
67
 
58
-
59
68
  Configuration Example
60
69
  =====================
61
70
 
@@ -137,7 +146,7 @@ By default these are set as:
137
146
 
138
147
  * files_to_check: %w{ db/schema.rb }
139
148
  * fixture_builder_file: RAILS_ROOT/tmp/fixture_builder.yml
140
- * record_name_fields: %w{ schema_migrations }
149
+ * record_name_fields: %w{ unique_name display_name name title username login }
141
150
  * skip_tables: %w{ schema_migrations }
142
151
  * select_sql: SELECT * FROM %{table}
143
152
  * delete_sql: DELETE FROM %{table}
@@ -150,7 +159,7 @@ When the fixtures are generated only as needed, sometimes the process that
150
159
  generates the fixtures will be different than the process that runs the tests.
151
160
  This results in collisions when you still use factories in your tests.
152
161
 
153
- There's a couple of approaches for this.
162
+ There's a couple of solutions for this.
154
163
 
155
164
  Here's a solution for FactoryGirl which resets sequences numbers to 1000
156
165
  (to avoid conflicts with fixture data which should be sequenced < 1000)
@@ -168,7 +177,7 @@ end
168
177
  FactoryGirl.sequences.each do |seq|
169
178
 
170
179
  # Factory Girl 4 uses an Enumerator Adapter, otherwise simply set a Fixnum
171
- seq.instance_variable_set(:@value, FactoryGirl::Sequence::EnumeratorAdapter.new(2000))
180
+ seq.instance_variable_set(:@value, FactoryGirl::Sequence::EnumeratorAdapter.new(1000))
172
181
 
173
182
  end
174
183
  ```
@@ -186,8 +195,45 @@ end
186
195
 
187
196
  ```
188
197
 
189
- Advanced Usage
190
- ==============
198
+ It's probably a good idea to use both of these approaches together, especially if you are
199
+ going to fall back to using FactoryGirl object mothers in addition to fixtures.
200
+
201
+ Tips
202
+ ====
203
+
204
+ * Don't use `seeds.rb` (just delete it). Instead, just use `rake db:fixtures:load` to get fixtures into dev.
205
+ * If you want fixture data on a staging/demo environment, either run `db:fixtures:load` on that environment, or
206
+ load fixtures into the dev with `rake db:fixtures:load`, dump the dev database, then load it on your environment.
207
+ * Always use fixtures instead of object mothers in tests when possible - this will keep your test suite fast!
208
+ [Even FactoryGirl says to avoid using factories when you can, because creating and persisting data is slow](https://robots.thoughtbot.com/speed-up-tests-by-selectively-avoiding-factory-girl)
209
+ * If you only need to tweak an attribute or two to test an edge case, load the fixture object,
210
+ then just set the attribute on the object (if you don't need it persisted, this is fastest), or
211
+ set it via `#update_attributes!` (only if you need it persisted, this is slower).
212
+ * Avoid referring to any fixtures by ID anywhere, unless you hardcode the ID when creating it. They can change
213
+ if you add more fixtures in the future and cause tests to break.
214
+ * To set up associations between different types of created fixture model objects, you can
215
+ use a couple of approaches:
216
+ 1. When creating fixtures, keep a hash of all created models by type + name (not ID), and then look them up
217
+ out of the hash to use as an associated object when creating subsequent related objects.
218
+ 1. Do a `MyModel.find_by_some_unique_field` to find a previously created instance that didn't have a name.
219
+ * If you delete a table, old fixture files for the deleted table can hang around and still get loaded
220
+ into the database, causing confusion or errors. Use `rake spec:fixture_builder:clean` or
221
+ `rake spec:fixture_builder:rebuild` to ensure they get cleaned up.
222
+ * As you build more advanced fixture creation logic for your app's domain and try to DRY it up, you'll probably
223
+ end up having an easier time if:
224
+ 1. You don't use any namespaced models
225
+ 1. You keep your factory names consistent and exactly matching your model names
226
+ * Modify `bin/setup` to run fixture builder and load your dev database:
227
+ ```ruby
228
+ puts "\n== Building fixtures =="
229
+ system! 'bin/rails spec:fixture_builder:rebuild'
230
+
231
+ puts "\n== Loading fixtures into dev database =="
232
+ system! 'bin/rails db:fixtures:load'
233
+ ```
234
+
235
+ More Complete Config Example
236
+ ============================
191
237
 
192
238
  As you get more fixtures, you may want to move the creation of fixtures to a separate file. For example:
193
239
 
@@ -208,6 +254,11 @@ FixtureBuilder.configure do |fbuilder|
208
254
  CreateFixtures.new(fbuilder).create_all
209
255
  end
210
256
  end
257
+
258
+ # Have factory girl generate non-colliding sequences starting at 1000 for data created after the fixtures
259
+ FactoryGirl.sequences.each do |seq|
260
+ seq.instance_variable_set(:@value, FactoryGirl::Sequence::EnumeratorAdapter.new(1000))
261
+ end
211
262
  ```
212
263
 
213
264
  Then, you can do more extensive and advanced fixture creation in that class. Here's
@@ -252,32 +303,11 @@ class CreateFixtures
252
303
 
253
304
  # other creation and helper methods to abstract common logic, e.g.
254
305
  # * custom naming rules via #name_model_with
255
- # * set up associations by storing created model records in a hash: models[model_class_name][model_name.to_sym] = record
306
+ # * set up associations by storing created model records in a hash so you can retrieve them
256
307
  # etc... (hopefully some of these helper patterns can be standardized and included in the gem in the future)
257
308
  end
258
309
  ```
259
310
 
260
- Tips
261
- ====
262
-
263
- * Don't use `seeds.rb`. Instead, just use `rake db:fixtures:load` to get fixtures into dev. If you
264
- want fixture data on a staging/demo environment, either run `db:fixtures:load`, or
265
- dump the database and load it there.
266
- * Always use fixtures instead of object mothers in tests when possible - this will keep your test suite fast!
267
- [Even FactoryGirl says to avoid using factories when you can, because creating and persisting data is slow](https://robots.thoughtbot.com/speed-up-tests-by-selectively-avoiding-factory-girl)
268
- * If you only need to tweak an attribute or two to test an edge case, load the fixture object,
269
- then just set the attribute on the object (if you don't need it persisted, this is fastest), or
270
- set it via `#update_attributes!` (only if you need it persisted, this is slower).
271
- * Modify `bin/setup` to run fixture builder and load your dev database:
272
- ```ruby
273
- puts "\n== Building fixtures =="
274
- system! 'bin/rails spec:fixture_builder:build'
275
-
276
- puts "\n== Loading fixtures into dev database =="
277
- system! 'bin/rails db:fixtures:load'
278
- ```
279
-
280
-
281
311
  Copyright (c) 2009 Ryan Dy & David Stevenson, released under the MIT license
282
312
 
283
313
  Currently maintained by [Chad Woolley](thewoolleyman@gmail.com)
@@ -1,3 +1,3 @@
1
1
  module FixtureBuilder
2
- VERSION = '0.5.1.rc4'
2
+ VERSION = '0.5.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixture_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1.rc4
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Dy
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-12-24 00:00:00.000000000 Z
13
+ date: 2018-01-03 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activerecord
@@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  version: '0'
152
152
  requirements: []
153
153
  rubyforge_project: fixture_builder
154
- rubygems_version: 2.4.8
154
+ rubygems_version: 2.4.5.1
155
155
  signing_key:
156
156
  specification_version: 4
157
157
  summary: Build Rails fixtures using object mother factories