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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 473a2a53021fcb6a622b9585c95769a343c7a5bbeaba96e25a347f96211ae156
4
- data.tar.gz: ec5cbfaa5d092b11c1ba9716b47440795866fee6ae377d968ce1a44bf9a2e93c
3
+ metadata.gz: 3a4711e5c5ca0eaaebf6d44bfa7751f09e4ff1fc6b5969e4ed4af04d43469069
4
+ data.tar.gz: 6ed3b3e4961f21fb4435d3b571b9ab04e78cf3c7cdfe9cce8dc7c9021e663ae0
5
5
  SHA512:
6
- metadata.gz: d32f502880c8e88e111c640cbdfa8ebfdf7a1369d06eb4421d55e9bfe3b014a91df399605037e77cdc0cbe8720c6a40808551f40c9d918af991d3dfba2ced2c5
7
- data.tar.gz: e39d80ac110da1f67b1f219fe277bd83a85eb6e6e6dbac0cc4657fd6a22f6103ab469082a641c5caff11ed0b6d33f4a01c9fdcb1718c959422ef83819c1d318b
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 Rails.env.development?
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/fixture_recorder"
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.public_send(belongs_to_association.name)
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
@@ -1,3 +1,3 @@
1
1
  module FixtureFarm
2
- VERSION = '0.1.3'
2
+ VERSION = '0.1.4'
3
3
  end
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 |base|
13
- base.include FixtureFarm::ActiveRecordExtension
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.3
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-03-01 00:00:00.000000000 Z
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.1.4.1
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.1.4.1
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