seed_reaper 0.0.3 → 0.0.6

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: 3b3718d655f542f022d098a6a3d6d117957a3c27c755cb4ea3291d2ef07467de
4
- data.tar.gz: c50dd4f1bb5d335593988810b42d117b23502a289a65aafa73d107060fe293f1
3
+ metadata.gz: 33aaf207d0c92c6c1c42f679d275cafa0c4cb52537b75bc7b05ab59b8c53beb4
4
+ data.tar.gz: 4d88d55befff9eb3fd5ddcb290325541bb866ee023a5173310700c77100eab74
5
5
  SHA512:
6
- metadata.gz: 12e1027c7f5664cb3813abfd3531580e64012b7c0606a47e69f36937ed4e1c1b9fffc066af63572e6c115d591ce144ca66d1e31a15c8efd1c84ab1ee1c18b222
7
- data.tar.gz: 897fb366266c4822fabf13032bd273fc00c1385bbf51060cada640a7ccc8435c5335e24c4150902a3eb81cfbccf903157d325577b208fa2a3199e0c1542c5743
6
+ metadata.gz: 1a13d8c2f213c592b57079b573789a66512290595bbbe8a2f5efb992e69eae30e7219349b8ebe8bb5dbc352e03c42f8eb14c6c57a51c29ab8cf5a6defa3cbaf8
7
+ data.tar.gz: d49d7e67e0c2955b814db386ba23f65abf01b6f67e3c119041050d212677df6217a6c54c1ceadaefb8db05fcc9193b65f3c685561f4183ccea8c67e3001c5e79
@@ -14,7 +14,33 @@ module SeedReaper
14
14
  @config
15
15
  end
16
16
 
17
- %i[count joins].each do |meta_field|
17
+ def belongs_to_schema(instance)
18
+ return nil unless schema
19
+ return schema.select { |k| instance._reflections[k.to_s].belongs_to? } if schema.is_a?(Hash)
20
+ return schema.select do |c|
21
+ if c.is_a?(Hash)
22
+ instance._reflections[c.first[0].to_s].belongs_to?
23
+ else
24
+ instance._reflections[c.to_s].belongs_to?
25
+ end
26
+ end if schema.is_a?(Array)
27
+ return schema if instance._reflections[schema.to_s].belongs_to?
28
+ end
29
+
30
+ def non_belongs_to_schema(instance)
31
+ return nil unless schema
32
+ return schema.reject { |k| instance._reflections[k.to_s].belongs_to? } if schema.is_a?(Hash)
33
+ return schema.reject do |c|
34
+ if c.is_a?(Hash)
35
+ instance._reflections[c.first[0].to_s].belongs_to?
36
+ else
37
+ instance._reflections[c.to_s].belongs_to?
38
+ end
39
+ end if schema.is_a?(Array)
40
+ return schema unless instance._reflections[schema.to_s].belongs_to?
41
+ end
42
+
43
+ %i[count joins nullify].each do |meta_field|
18
44
  define_method meta_field do
19
45
  meta(meta_field)
20
46
  end
@@ -2,11 +2,13 @@
2
2
 
3
3
  require 'active_support/inflector'
4
4
  require_relative 'config_evaluator'
5
+ require_relative 'value_serializer'
5
6
 
6
7
  module SeedReaper
7
8
  class Seedifier
8
9
  def initialize(config)
9
10
  @config = config
11
+ @serialized = []
10
12
  end
11
13
 
12
14
  def seedify
@@ -30,7 +32,10 @@ module SeedReaper
30
32
  def seedify_collection(collection, config)
31
33
  ce = ConfigEvaluator.new(config)
32
34
  evaluated_collection(collection, ce).reduce('') do |str, instance|
33
- str += serialize(instance) + seedify_associations(instance, ce.schema)
35
+ str +=
36
+ seedify_associations(instance, ce.belongs_to_schema(instance)) +
37
+ serialize(instance, ce) +
38
+ seedify_associations(instance, ce.non_belongs_to_schema(instance))
34
39
  end
35
40
  end
36
41
 
@@ -82,24 +87,20 @@ module SeedReaper
82
87
  collection
83
88
  end
84
89
 
85
- def serialize(instance)
86
- "#{instance.class}.new(\n#{serialize_attrs(instance)}\n).save!(validate: false)\n\n"
90
+ def serialize(instance, config_evaluator)
91
+ seed = "#{instance.class}.new(\n#{serialize_attrs(instance, config_evaluator)}\n).save!(validate: false)\n\n"
92
+ hashed_seed = Digest::SHA2.hexdigest(seed)
93
+ return '' if @serialized.include?(hashed_seed)
94
+
95
+ @serialized << hashed_seed
96
+ seed
87
97
  end
88
98
 
89
- def serialize_attrs(instance)
99
+ def serialize_attrs(instance, config_evaluator)
90
100
  instance.attributes.to_h.reduce('') do |attr_str, (k, v)|
91
- attr_str += "\s\s#{k}: #{serialize_value(v)},\n"
101
+ nullify = [config_evaluator.nullify].flatten.compact.map(&:to_s).include?(k.to_s)
102
+ attr_str += "\s\s#{k}: #{ValueSerializer.new(v).serialized(nullify: nullify)},\n"
92
103
  end[0...-2]
93
104
  end
94
-
95
- def serialize_value(value)
96
- if value.nil?
97
- "nil"
98
- elsif value.is_a?(Integer)
99
- value
100
- else
101
- "\"#{value}\""
102
- end
103
- end
104
105
  end
105
106
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SeedReaper
4
+ class ValueSerializer
5
+ def initialize(value)
6
+ @value = value
7
+ end
8
+
9
+ def serialized(nullify: false)
10
+ @serialized ||=
11
+ if nullify || @value.nil?
12
+ "nil"
13
+ elsif @value.is_a?(Integer)
14
+ @value
15
+ else
16
+ "%q{#{@value}}"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SeedReaper
4
+ VERSION = '0.0.6'
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seed_reaper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Butts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-17 00:00:00.000000000 Z
11
+ date: 2022-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -150,6 +150,8 @@ files:
150
150
  - lib/seed_reaper/seed_writer.rb
151
151
  - lib/seed_reaper/seedifier.rb
152
152
  - lib/seed_reaper/tasks/seed_reaper.rake
153
+ - lib/seed_reaper/value_serializer.rb
154
+ - lib/seed_reaper/version.rb
153
155
  homepage: https://github.com/dbutts2/seed_reaper
154
156
  licenses:
155
157
  - MIT