Class: Protobuf::Generators::GroupGenerator

Inherits:
Object
  • Object
show all
Includes:
Printable
Defined in:
lib/protobuf/generators/group_generator.rb

Constant Summary

Constants included from Printable

Printable::PARENT_CLASS_ENUM, Printable::PARENT_CLASS_MESSAGE, Printable::PARENT_CLASS_SERVICE

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Printable

#init_printer

Constructor Details

#initialize(indent_level = 0) ⇒ GroupGenerator

Returns a new instance of GroupGenerator.



16
17
18
19
20
21
22
23
24
# File 'lib/protobuf/generators/group_generator.rb', line 16

def initialize(indent_level = 0)
  @groups = Hash.new { |h, k| h[k] = [] }
  @headers = {}
  @comments = {}
  @handlers = {}
  @indent_level = indent_level
  @order = [:enum, :message_declaration, :options, :message, :extended_message, :service]
  init_printer(indent_level)
end

Instance Attribute Details

#groupsObject (readonly)

Returns the value of attribute groups.



13
14
15
# File 'lib/protobuf/generators/group_generator.rb', line 13

def groups
  @groups
end

#indent_levelObject (readonly)

Returns the value of attribute indent_level.



13
14
15
# File 'lib/protobuf/generators/group_generator.rb', line 13

def indent_level
  @indent_level
end

#order=(value) ⇒ Object (writeonly)

Sets the attribute order

Parameters:

  • value

    the value to set the attribute order to.



14
15
16
# File 'lib/protobuf/generators/group_generator.rb', line 14

def order=(value)
  @order = value
end

Instance Method Details

#add_comment(type, message) ⇒ Object



36
37
38
# File 'lib/protobuf/generators/group_generator.rb', line 36

def add_comment(type, message)
  @comments[type] = message
end

#add_enums(enum_descriptors, options) ⇒ Object



30
31
32
33
34
# File 'lib/protobuf/generators/group_generator.rb', line 30

def add_enums(enum_descriptors, options)
  enum_descriptors.each do |enum_descriptor|
    @groups[:enum] << EnumGenerator.new(enum_descriptor, indent_level, options)
  end
end

#add_extended_messages(extended_messages, skip_empty_fields = true) ⇒ Object



40
41
42
43
44
45
# File 'lib/protobuf/generators/group_generator.rb', line 40

def add_extended_messages(extended_messages, skip_empty_fields = true)
  extended_messages.each do |message_type, field_descriptors|
    next if skip_empty_fields && field_descriptors.empty?
    @groups[:extended_message] << ExtensionGenerator.new(message_type, field_descriptors, indent_level)
  end
end

#add_extension_fields(field_descriptors) ⇒ Object



47
48
49
50
51
# File 'lib/protobuf/generators/group_generator.rb', line 47

def add_extension_fields(field_descriptors)
  field_descriptors.each do |field_descriptor|
    @groups[:extension_field] << FieldGenerator.new(field_descriptor, nil, indent_level)
  end
end

#add_extension_ranges(extension_ranges, &item_handler) ⇒ Object



53
54
55
56
# File 'lib/protobuf/generators/group_generator.rb', line 53

def add_extension_ranges(extension_ranges, &item_handler)
  @groups[:extension_range] = extension_ranges
  @handlers[:extension_range] = item_handler
end

#add_header(type, message) ⇒ Object



58
59
60
# File 'lib/protobuf/generators/group_generator.rb', line 58

def add_header(type, message)
  @headers[type] = message
end

#add_message_declarations(descriptors) ⇒ Object



62
63
64
65
66
67
68
# File 'lib/protobuf/generators/group_generator.rb', line 62

def add_message_declarations(descriptors)
  descriptors.each do |descriptor|
    # elide synthetic map entry messages (we handle map fields differently)
    next if descriptor.options.try(:map_entry?) { false }
    @groups[:message_declaration] << MessageGenerator.new(descriptor, indent_level, :declaration => true)
  end
end

#add_message_fields(field_descriptors, msg_descriptor) ⇒ Object



70
71
72
73
74
# File 'lib/protobuf/generators/group_generator.rb', line 70

def add_message_fields(field_descriptors, msg_descriptor)
  field_descriptors.each do |field_descriptor|
    @groups[:field] << FieldGenerator.new(field_descriptor, msg_descriptor, indent_level)
  end
end

#add_messages(descriptors, options = {}) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/protobuf/generators/group_generator.rb', line 76

def add_messages(descriptors, options = {})
  descriptors.each do |descriptor|
    # elide synthetic map entry message (we handle map fields differently)
    next if descriptor.options.try(:map_entry?) { false }
    @groups[:message] << MessageGenerator.new(descriptor, indent_level, options)
  end
end

#add_options(option_descriptor) ⇒ Object



26
27
28
# File 'lib/protobuf/generators/group_generator.rb', line 26

def add_options(option_descriptor)
  @groups[:options] << OptionGenerator.new(option_descriptor, indent_level)
end

#add_services(service_descriptors) ⇒ Object



84
85
86
87
88
# File 'lib/protobuf/generators/group_generator.rb', line 84

def add_services(service_descriptors)
  service_descriptors.each do |service_descriptor|
    @groups[:service] << ServiceGenerator.new(service_descriptor, indent_level)
  end
end

#compileObject



90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/protobuf/generators/group_generator.rb', line 90

def compile
  @order.each do |type|
    items = @groups[type]
    next if items.empty?

    item_handler = @handlers[type]

    item_header = @headers[type]
    header(item_header) if item_header

    item_comment = @comments[type]
    comment(item_comment) if item_comment

    items.each do |item|
      if item_handler
        puts item_handler.call(item)
      else
        print item.to_s
      end
    end

    puts if type == :message_declaration || type == :options
  end
end

#to_sObject



115
116
117
118
# File 'lib/protobuf/generators/group_generator.rb', line 115

def to_s
  compile
  print_contents
end