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.



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

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

Instance Attribute Details

#groupsObject (readonly)

Returns the value of attribute groups.



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

def groups
  @groups
end

#indent_levelObject (readonly)

Returns the value of attribute indent_level.



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

def indent_level
  @indent_level
end

#order=(value) ⇒ Object (writeonly)

Sets the attribute order

Parameters:

  • value

    the value to set the attribute order to.



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

def order=(value)
  @order = value
end

Instance Method Details

#add_comment(type, message) ⇒ Object



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

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

#add_enums(enum_descriptors, options) ⇒ Object



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

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) ⇒ Object



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

def add_extended_messages(extended_messages)
  extended_messages.each do |message_type, field_descriptors|
    @groups[:extended_message] << ExtensionGenerator.new(message_type, field_descriptors, indent_level)
  end
end

#add_extension_fields(field_descriptors) ⇒ Object



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

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

#add_extension_ranges(extension_ranges, &item_handler) ⇒ Object



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

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

#add_header(type, message) ⇒ Object



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

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

#add_message_declarations(descriptors) ⇒ Object



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

def add_message_declarations(descriptors)
  descriptors.each do |descriptor|
    @groups[:message_declaration] << MessageGenerator.new(descriptor, indent_level, :declaration => true)
  end
end

#add_message_fields(field_descriptors) ⇒ Object



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

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

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



68
69
70
71
72
# File 'lib/protobuf/generators/group_generator.rb', line 68

def add_messages(descriptors, options = {})
  descriptors.each do |descriptor|
    @groups[:message] << MessageGenerator.new(descriptor, indent_level, options)
  end
end

#add_services(service_descriptors) ⇒ Object



74
75
76
77
78
# File 'lib/protobuf/generators/group_generator.rb', line 74

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

#compileObject



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/protobuf/generators/group_generator.rb', line 80

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
  end
end

#to_sObject



105
106
107
108
# File 'lib/protobuf/generators/group_generator.rb', line 105

def to_s
  compile
  print_contents
end