seed_reaper 0.0.2 → 0.0.5

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: 0347bce9f9ed607a63163bd7e25b290b3a961e9d18b6f9e95a07c917a216a892
4
- data.tar.gz: 539a54c298af39892b4944d2dd0b18db062029170cf914958f89d5db2a1102ad
3
+ metadata.gz: 1fad4ebc284e6a5e6a30df7e9a3305c70d48060d4d12a4a48f69391149fc975a
4
+ data.tar.gz: a66337b1c8749eb67a42b1fb1bb9d601e8f1cc21cf2002cb22044e534007b81f
5
5
  SHA512:
6
- metadata.gz: 7c8b1f2f7a6b2c21de8ab5c87f329a20d4a21cf622c9816d68cbf69b2d218a63cac468f3176986ffe6ac8b6ecdcd1c9329b1ab61448bb6714407cb9cb516c056
7
- data.tar.gz: 2dbfe636a01fc0d62bbd54edee05a4daf50db7779687ccb2b288b015d4d26bb55796ac0b94c7de88b850abf1068371c89d5af254198d8baca91efb1051946cbd
6
+ metadata.gz: 9f5756b19dd5aaac7567cfbe78669e96e0c936d9cad7f50f1ecddbc9272581018b4bf1ef27d88bbee83b713c40d5278f36e777956cf473f1b533f480cc49d884
7
+ data.tar.gz: f78cedba61282dfe2f36c25b80c637630a39a2051bf35471df3922d9efed6d9d31d4058919ceec443f6b5b66d36ef177c76e9ecf8156593649bf7a1082942bfb
@@ -14,6 +14,32 @@ module SeedReaper
14
14
  @config
15
15
  end
16
16
 
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
+
17
43
  %i[count joins].each do |meta_field|
18
44
  define_method meta_field do
19
45
  meta(meta_field)
@@ -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) +
38
+ seedify_associations(instance, ce.non_belongs_to_schema(instance))
34
39
  end
35
40
  end
36
41
 
@@ -83,23 +88,18 @@ module SeedReaper
83
88
  end
84
89
 
85
90
  def serialize(instance)
86
- "#{instance.class}.new(\n#{serialize_attrs(instance)}\n).save!(validate: false)\n\n"
91
+ seed = "#{instance.class}.new(\n#{serialize_attrs(instance)}\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
99
  def serialize_attrs(instance)
90
100
  instance.attributes.to_h.reduce('') do |attr_str, (k, v)|
91
- attr_str += "\s\s#{k}: #{serialize_value(v)},\n"
101
+ attr_str += "\s\s#{k}: #{ValueSerializer.new(v).serialized},\n"
92
102
  end[0...-2]
93
103
  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
104
  end
105
105
  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
10
+ @serialized ||=
11
+ if @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.5'
5
+ end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seed_reaper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.5
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-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '7.0'
19
+ version: '6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '7.0'
26
+ version: '6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -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