class Protip::Transformers::EnumTransformer::SingleMessageEnumTransformer

Internal helper classes - under the hood we use separate transformers for the scalar and repeated cases, and both of them share transformation logic by inheriting from SingleMessageEnumTransformer.

Private Instance Methods

enum_for_field(field) click to toggle source

Instance-level cached version of the class method above

# File lib/protip/transformers/enum_transformer.rb, line 23
def enum_for_field(field)
  @enum_for_field_cache ||= {}
  name = EnumTransformer.enum_for_field(field)
  @enum_for_field_cache[name] ||= EnumTransformer.enum_for_field(field)

  @enum_for_field_cache[name] ||
    raise("protip_enum missing or invalid for field '#{field.name}'")
end
to_int(symbol_or_int, field) click to toggle source

Matches the protobuf enum setter behavior. Convert :VALUE or 5 to their corresponding enum integer value. @example

// foo.proto
enum Foo {
  BAR = 0;
  BAZ = 1;
}
// ScalarTransformer.to_int(:BAZ) # => 1
// ScalarTransformer.to_int(4) # => 4
# File lib/protip/transformers/enum_transformer.rb, line 42
def to_int(symbol_or_int, field)
  if symbol_or_int.is_a?(1.class)
    symbol_or_int
  else
    # Convert +.to_sym+ explicitly to allow strings (or other
    # symobolizable objects) to be passed in to setters.
    enum_for_field(field).lookup_name(symbol_or_int.to_sym) ||
      raise(RangeError.new "unknown symbol value for field '#{field.name}'")
  end
end
to_symbol_or_int(int, field) click to toggle source

Matches the protobuf enum getter behavior. Convert integers to their associated enum symbol, or pass them through if the

# File lib/protip/transformers/enum_transformer.rb, line 56
def to_symbol_or_int(int, field)
  enum = EnumTransformer.enum_for_field(field) ||
    raise("protip_enum missing or invalid for field '#{field.name}'")
  enum.lookup_value(int) || int
end