module Protobuf::Optionable

Public Class Methods

inject(base_class, extend_class = true, &block) click to toggle source
# File lib/protobuf/optionable.rb, line 46
def self.inject(base_class, extend_class = true, &block)
  unless block_given?
    fail ArgumentError, 'missing option class block (e.g: ::Google::Protobuf::MessageOptions)'
  end
  if extend_class
    # Check if optionable_descriptor_class is already defined and short circuit if so.
    # File options are injected per module, and since a module can be defined more than once,
    # we will get a warning if we try to define optionable_descriptor_class twice.
    if base_class.respond_to?(:optionable_descriptor_class)
      # Don't define optionable_descriptor_class twice
      return  if base_class.optionable_descriptor_class == block.call

      fail 'A class is being defined with two different descriptor classes, something is very wrong'
    end

    base_class.extend(ClassMethods)
    base_class.__send__(:include, self)
    base_class.define_singleton_method(:optionable_descriptor_class, block)
  else
    base_class.__send__(:include, ClassMethods)
    base_class.module_eval { define_method(:optionable_descriptor_class, block) }
  end
end

Public Instance Methods

get_option(name) click to toggle source
# File lib/protobuf/optionable.rb, line 38
def get_option(name)
  self.class.get_option(name)
end
get_option!(name) click to toggle source
# File lib/protobuf/optionable.rb, line 42
def get_option!(name)
  self.class.get_option!(name)
end