seed_reaper 0.0.2 → 0.0.5
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/lib/seed_reaper/config_evaluator.rb +26 -0
- data/lib/seed_reaper/seedifier.rb +13 -13
- data/lib/seed_reaper/value_serializer.rb +20 -0
- data/lib/seed_reaper/version.rb +5 -0
- metadata +8 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fad4ebc284e6a5e6a30df7e9a3305c70d48060d4d12a4a48f69391149fc975a
|
4
|
+
data.tar.gz: a66337b1c8749eb67a42b1fb1bb9d601e8f1cc21cf2002cb22044e534007b81f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 +=
|
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}: #{
|
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
|
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.
|
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-
|
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: '
|
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: '
|
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
|