fixture_farm 0.1.3 → 0.1.4
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/README.md +32 -20
- data/lib/fixture_farm/active_job_hook.rb +14 -0
- data/lib/fixture_farm/active_record_extension.rb +1 -1
- data/lib/fixture_farm/controller_hook.rb +2 -17
- data/lib/fixture_farm/fixture_recorder.rb +20 -3
- data/lib/fixture_farm/hook.rb +20 -0
- data/lib/fixture_farm/version.rb +1 -1
- data/lib/fixture_farm.rb +3 -2
- metadata +6 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3a4711e5c5ca0eaaebf6d44bfa7751f09e4ff1fc6b5969e4ed4af04d43469069
|
4
|
+
data.tar.gz: 6ed3b3e4961f21fb4435d3b571b9ab04e78cf3c7cdfe9cce8dc7c9021e663ae0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ddd75078a5228b34a5d3034d339ddff5fefccc1f003595a96bbae9f97e7ae334c2833d29cb979e9cd890fb77c1b89d95f612fc0a55996bd2f9b22e218d528e8
|
7
|
+
data.tar.gz: 7d53ed3b3617c6456fb515b17f6ce87361349c79ee370ee9cc42f2ae1d9f4a4fd383c45f5f4c6fee3434c485e3122d579a540e4c346ef62c1d2914564ba65093
|
data/README.md
CHANGED
@@ -7,6 +7,31 @@ This gem lets you do two things:
|
|
7
7
|
|
8
8
|
Generated fixture that `belongs_to` a record from an existing fixture, will reference that fixture by name.
|
9
9
|
|
10
|
+
### Limitations
|
11
|
+
|
12
|
+
- doesn't update fixtures
|
13
|
+
- doesn't delete fixtures
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your application's Gemfile:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
gem 'fixture_farm', group: %i[development test]
|
21
|
+
```
|
22
|
+
|
23
|
+
And then execute:
|
24
|
+
|
25
|
+
```bash
|
26
|
+
bundle install
|
27
|
+
```
|
28
|
+
|
29
|
+
Or install it yourself as:
|
30
|
+
|
31
|
+
```bash
|
32
|
+
gem install fixture_farm
|
33
|
+
```
|
34
|
+
|
10
35
|
## Usage
|
11
36
|
|
12
37
|
### Record as you browse
|
@@ -14,7 +39,13 @@ Generated fixture that `belongs_to` a record from an existing fixture, will refe
|
|
14
39
|
To record as you browse in development add this to `ApplicationController`:
|
15
40
|
|
16
41
|
```ruby
|
17
|
-
include FixtureFarm::ControllerHook if
|
42
|
+
include FixtureFarm::ControllerHook if defined?(FixtureFarm)
|
43
|
+
```
|
44
|
+
|
45
|
+
And in `ApplicationJob` if needed:
|
46
|
+
|
47
|
+
```ruby
|
48
|
+
include FixtureFarm::ActiveJobHook if defined?(FixtureFarm)
|
18
49
|
```
|
19
50
|
|
20
51
|
Then start/stop recording using tasks:
|
@@ -59,24 +90,5 @@ test 'some stuff does the right thing' do
|
|
59
90
|
end
|
60
91
|
```
|
61
92
|
|
62
|
-
## Installation
|
63
|
-
Add this line to your application's Gemfile:
|
64
|
-
|
65
|
-
```ruby
|
66
|
-
gem 'fixture_farm', group: %i[development test]
|
67
|
-
```
|
68
|
-
|
69
|
-
And then execute:
|
70
|
-
|
71
|
-
```bash
|
72
|
-
bundle install
|
73
|
-
```
|
74
|
-
|
75
|
-
Or install it yourself as:
|
76
|
-
|
77
|
-
```bash
|
78
|
-
gem install fixture_farm
|
79
|
-
```
|
80
|
-
|
81
93
|
## License
|
82
94
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'fixture_farm/hook'
|
4
|
+
|
5
|
+
module FixtureFarm
|
6
|
+
module ActiveJobHook
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
include Hook
|
9
|
+
|
10
|
+
included do
|
11
|
+
around_perform :record_new_fixtures, if: :record_new_fixtures?
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -7,7 +7,7 @@ module FixtureFarm
|
|
7
7
|
|
8
8
|
return nil unless File.exist?(fixtures_file_path)
|
9
9
|
|
10
|
-
fixtures = YAML.load_file(fixtures_file_path)
|
10
|
+
fixtures = YAML.load_file(fixtures_file_path, permitted_classes: [ActiveSupport::HashWithIndifferentAccess])
|
11
11
|
fixtures.keys.find do |key|
|
12
12
|
ActiveRecord::FixtureSet.identify(key) == id
|
13
13
|
end
|
@@ -1,29 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "fixture_farm/
|
3
|
+
require "fixture_farm/hook"
|
4
4
|
|
5
5
|
module FixtureFarm
|
6
6
|
module ControllerHook
|
7
7
|
extend ActiveSupport::Concern
|
8
|
+
include Hook
|
8
9
|
|
9
10
|
included do
|
10
11
|
around_action :record_new_fixtures, if: :record_new_fixtures?
|
11
12
|
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def record_new_fixtures(&block)
|
16
|
-
fixture_recorder = FixtureRecorder.resume_recording_session
|
17
|
-
|
18
|
-
fixture_recorder.record_new_fixtures do
|
19
|
-
block.call
|
20
|
-
end
|
21
|
-
ensure
|
22
|
-
fixture_recorder.update_recording_session
|
23
|
-
end
|
24
|
-
|
25
|
-
def record_new_fixtures?
|
26
|
-
FixtureRecorder.recording_session_in_progress?
|
27
|
-
end
|
28
13
|
end
|
29
14
|
end
|
@@ -13,7 +13,7 @@ module FixtureFarm
|
|
13
13
|
def self.resume_recording_session
|
14
14
|
start_recording_session! unless recording_session_in_progress?
|
15
15
|
|
16
|
-
recording_session = JSON.load_file(STORE_PATH)
|
16
|
+
recording_session = JSON.load_file(STORE_PATH, permitted_classes: [ActiveSupport::HashWithIndifferentAccess])
|
17
17
|
|
18
18
|
new_models = recording_session['new_models'].map do |(class_name, id)|
|
19
19
|
class_name.constantize.find(id)
|
@@ -113,7 +113,7 @@ module FixtureFarm
|
|
113
113
|
end
|
114
114
|
|
115
115
|
if belongs_to_association
|
116
|
-
associated_model_instance = model_instance
|
116
|
+
associated_model_instance = find_assiciated_model_instance(model_instance, belongs_to_association)
|
117
117
|
|
118
118
|
associated_fixture_name = named_new_fixtures.find do |_, fixture_model|
|
119
119
|
fixture_model.id == associated_model_instance.id
|
@@ -125,9 +125,12 @@ module FixtureFarm
|
|
125
125
|
end
|
126
126
|
end.to_h
|
127
127
|
|
128
|
+
yaml_attributes.delete('created_at') if yaml_attributes['created_at'] == '<%= Time.zone.now %>'
|
129
|
+
yaml_attributes.delete('updated_at') if yaml_attributes['updated_at'] == '<%= Time.zone.now %>'
|
130
|
+
|
128
131
|
fixtures_file_path = model_instance.fixtures_file_path
|
129
132
|
|
130
|
-
fixtures = File.exist?(fixtures_file_path) ? YAML.load_file(fixtures_file_path) : {}
|
133
|
+
fixtures = File.exist?(fixtures_file_path) ? YAML.load_file(fixtures_file_path, permitted_classes: [ActiveSupport::HashWithIndifferentAccess]) : {}
|
131
134
|
fixtures[new_fixture_name] = yaml_attributes
|
132
135
|
|
133
136
|
FileUtils.mkdir_p(fixtures_file_path.dirname)
|
@@ -139,6 +142,20 @@ module FixtureFarm
|
|
139
142
|
end
|
140
143
|
end
|
141
144
|
|
145
|
+
# Clear default_scope before finding associated model record.
|
146
|
+
# This, in particular, turns off ActsAsTenant, that otherwise
|
147
|
+
# might return no record if the tenant has changed by this point.
|
148
|
+
def find_assiciated_model_instance(model_instance, association)
|
149
|
+
associated_model_class = if association.polymorphic?
|
150
|
+
model_instance.public_send(association.foreign_type).safe_constantize
|
151
|
+
else
|
152
|
+
association.klass
|
153
|
+
end
|
154
|
+
|
155
|
+
id = model_instance.public_send(association.foreign_key)
|
156
|
+
associated_model_class.unscoped.find(id)
|
157
|
+
end
|
158
|
+
|
142
159
|
def serialize_attributes(value)
|
143
160
|
case value
|
144
161
|
when ActiveSupport::TimeWithZone, Date
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "fixture_farm/fixture_recorder"
|
4
|
+
|
5
|
+
module FixtureFarm
|
6
|
+
module Hook
|
7
|
+
def record_new_fixtures(&block)
|
8
|
+
fixture_recorder = FixtureRecorder.resume_recording_session
|
9
|
+
fixture_recorder.record_new_fixtures { block.call }
|
10
|
+
ensure
|
11
|
+
fixture_recorder.update_recording_session
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def record_new_fixtures?
|
17
|
+
FixtureRecorder.recording_session_in_progress?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/fixture_farm/version.rb
CHANGED
data/lib/fixture_farm.rb
CHANGED
@@ -5,10 +5,11 @@ require 'fixture_farm/version'
|
|
5
5
|
module FixtureFarm
|
6
6
|
autoload :ActiveRecordExtension, 'fixture_farm/active_record_extension'
|
7
7
|
autoload :ControllerHook, 'fixture_farm/controller_hook'
|
8
|
+
autoload :ActiveJobHook, 'fixture_farm/active_job_hook'
|
8
9
|
autoload :TestHelper, 'fixture_farm/test_helper'
|
9
10
|
autoload :FixtureRecorder, 'fixture_farm/fixture_recorder'
|
10
11
|
end
|
11
12
|
|
12
|
-
ActiveSupport.on_load(:active_record) do
|
13
|
-
|
13
|
+
ActiveSupport.on_load(:active_record) do
|
14
|
+
include FixtureFarm::ActiveRecordExtension
|
14
15
|
end
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fixture_farm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- artemave
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 6.1.4
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: 6.
|
19
|
+
version: '6.2'
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 6.1.4
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: 6.
|
26
|
+
version: '6.2'
|
33
27
|
description:
|
34
28
|
email:
|
35
29
|
- mr@artem.rocks
|
@@ -45,9 +39,11 @@ files:
|
|
45
39
|
- bin/fixture_farm
|
46
40
|
- bin/fixture_farm.rb
|
47
41
|
- lib/fixture_farm.rb
|
42
|
+
- lib/fixture_farm/active_job_hook.rb
|
48
43
|
- lib/fixture_farm/active_record_extension.rb
|
49
44
|
- lib/fixture_farm/controller_hook.rb
|
50
45
|
- lib/fixture_farm/fixture_recorder.rb
|
46
|
+
- lib/fixture_farm/hook.rb
|
51
47
|
- lib/fixture_farm/test_helper.rb
|
52
48
|
- lib/fixture_farm/version.rb
|
53
49
|
homepage: https://github.com/featurist/fixture_farm
|