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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/proto_factory/builder.rb +58 -7
  3. metadata +29 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d0af991228449a98ae7ba2090c0d82cbedb7e2da
4
- data.tar.gz: df8d1f56ffbc5c63627218e90278fb6fbe97ea57
3
+ metadata.gz: 8e8086af03a8f753704841051041d40d78f4d5aa
4
+ data.tar.gz: 684927f66caf8e51817c77bbdef8f4afdf120c31
5
5
  SHA512:
6
- metadata.gz: 1c607ea67dc4387b0a35895f32f197367122d6eede4c26e6410adfe90d4903a22fbbd63b39f2db13e6343ba41ef1fd94da8788fa352944ca2940c1287b639781
7
- data.tar.gz: c0d4494330d97f00099a8897a7755dc7941e1d8ce78db5c6b54ce1bd21ff111b1f4b82738dfc966a906e37c9f5f1eb0bcab3fb3742c0b0fb9352888ae203f275
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
- def self.build(factory_name)
5
- factory_class = Object.const_get(self.find(factory_name))
6
- # other logic
7
- end
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
- def self.find(factory_name)
10
- ProtoFactory.configuration.factories[factory_name.to_sym]
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
- end
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.3
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: []