Module: Protobuf::Optionable

Defined in:
lib/protobuf/optionable.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.inject(base_class, extend_class = true, &block) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 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

Instance Method Details

#get_option(name) ⇒ Object



38
39
40
# File 'lib/protobuf/optionable.rb', line 38

def get_option(name)
  self.class.get_option(name)
end

#get_option!(name) ⇒ Object



42
43
44
# File 'lib/protobuf/optionable.rb', line 42

def get_option!(name)
  self.class.get_option!(name)
end