fixture_farm 0.1.3 → 0.1.4

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
  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