proto_factory 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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: []