proto_factory 0.0.3 → 0.0.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 +4 -4
- data/lib/proto_factory/builder.rb +58 -7
- metadata +29 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e8086af03a8f753704841051041d40d78f4d5aa
|
4
|
+
data.tar.gz: 684927f66caf8e51817c77bbdef8f4afdf120c31
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e36c88a31b976a20fb202612bff90807088a3f46f2ae0ceae7f13fc668f3625b910493f72bf0b0ea74075899b39765a865c46c7f34438468a0e74bcaa0436fe2
|
7
|
+
data.tar.gz: '0049fe3c852d2291605bad1ffc2b38f3f2c6777ceeb84288749bc3ef1610ce0201e961ceadd65fc65083575abbefbfba3434e743d9de0ef95f31684dd73b3049'
|
@@ -1,13 +1,64 @@
|
|
1
1
|
module ProtoFactory
|
2
2
|
class Builder
|
3
|
+
class << self
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
def build(factory_name = nil, factory_class: nil)
|
6
|
+
factory_class ||= Object.const_get(self.find(factory_name))
|
7
|
+
proto_object = factory_class.new
|
8
|
+
metadata = generate_types(factory_class)
|
9
|
+
set_data(proto_object, metadata, factory_class)
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_data(proto_object, metadata, factory_class)
|
13
|
+
metadata.each do |name, data_type|
|
14
|
+
case data_type
|
15
|
+
when :message
|
16
|
+
set_all_messages(proto_object, factory_class, name)
|
17
|
+
when :enum
|
18
|
+
set_random_enum(proto_object, factory_class, name)
|
19
|
+
when :int32, :int64
|
20
|
+
proto_object["#{name}"] = Faker::Number.number(4).to_i
|
21
|
+
when :string
|
22
|
+
proto_object["#{name}"] = Faker::Hacker.verb
|
23
|
+
when :bool
|
24
|
+
proto_object["#{name}"] = Faker::Boolean.boolean(0.5)
|
25
|
+
else
|
26
|
+
proto_object["#{name}"] = "Found a weird #{data_type} data type, yo."
|
27
|
+
end
|
28
|
+
end
|
29
|
+
proto_object
|
30
|
+
end
|
31
|
+
|
32
|
+
def submsg_to_class(submsg_name)
|
33
|
+
Object.const_get(submsg_name.split('.').map { |field| field.camelcase }.join('::'))
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_all_messages(proto_object, factory_class, name)
|
37
|
+
message_class = submsg_to_class(factory_class.descriptor.lookup("#{name}").submsg_name)
|
38
|
+
nested_collection = generate_types(message_class)
|
39
|
+
proto_object["#{name}"] = build(nil, message_class)
|
40
|
+
end
|
8
41
|
|
9
|
-
|
10
|
-
|
42
|
+
def set_random_enum(proto_object, factory_class, name)
|
43
|
+
enum_class = submsg_to_class(factory_class.descriptor.lookup("#{name}").submsg_name)
|
44
|
+
enum_options = enum_class.descriptor.to_h
|
45
|
+
size = enum_options.size.to_i
|
46
|
+
random_number = rand(1..size)
|
47
|
+
proto_object["#{name}"] = random_number
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate_types(factory_class)
|
51
|
+
metadata = {}
|
52
|
+
field_desc = factory_class.descriptor.to_a
|
53
|
+
field_desc.each do |field|
|
54
|
+
metadata["#{field.name}"] = field.type
|
55
|
+
end
|
56
|
+
metadata
|
57
|
+
end
|
58
|
+
|
59
|
+
def find(factory_name)
|
60
|
+
ProtoFactory.configuration.factories[factory_name.to_sym]
|
61
|
+
end
|
11
62
|
end
|
12
|
-
|
63
|
+
|
13
64
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: proto_factory
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lucas Moore, Terese Lichty, Marshall Houston
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.12.2
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.12.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rb-readline
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: A simple hello world gem
|
28
56
|
email: lucas.moore@ibotta.com
|
29
57
|
executables: []
|